Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получать и отправлять сообщение потоком [D6, WinXP]


Senti ©   (2005-02-11 17:24:00) 

Не могу нигде найти инфу как в потоке отправить сообщение, потом в этом же потоке его получить и обработать :(
Отправлять вроде нашел как через PostThreadedMessage...

Если кто может напишите пример кода отправки и получения сообщения потоком.

Заранее всем спасибо...


Leonid Troyanovsky   (2005-02-11 21:09:00) [1]


> Senti   (11.02.05 17:24)  
> Не могу нигде найти инфу как в потоке отправить сообщение,
> потом в этом же потоке его получить и обработать :(


SleepEx, QueueUserAPC.

--
Regards, LVT.


Senti   (2005-02-11 18:25:00) [2]

Большое спасибо за помощь !!!!!!!!!


У   (2005-02-11 18:22:00) [3]

procedure TMyThread.Execute;
var Msg: TMsg;
   Message: TMessage;
begin
if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
begin
  Message.Msg := Msg.Message;
  Message.lParam := Msg.lParam;
  Message.wParam := Msg.wParam;

  case Msg.Message of
    WM_QUIT: Terminated := True
    else Dispatch(Message);
    // направляется соотв методу TMyThread
  end;
end;
end;


Senti   (2005-02-11 18:11:00) [4]

Во спасибо... А как отправить именно для этого потока сообщение и поймать имеено процедурой

например как в форме
private
procedure Test(Msg: TMessage); message WM_SUPERUSER;

procedure Test(Msg : TMessage);
begin
// код....
end;


У   (2005-02-11 18:05:00) [5]

Если поток не создает окна, то можно обойтись
совсем примитивным циклом вроде

procedure TMyThread.Execute;
begin
 if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
 begin
   case Msg.Message of
     WM_QUIT: Terminated := True;
     WM_MY_MESSAGE_TO_MY_THREAD: DoSomething;
     {...}
   end;
 end;
end;


Senti   (2005-02-11 17:56:00) [6]

А как это перенести на Поток Thread ?


У   (2005-02-11 17:43:00) [7]

function TApplication.ProcessMessage(var Msg: TMsg): Boolean;
var
 Handled: Boolean;
begin
 Result := False;
 if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
 begin
   Result := True;
   if Msg.Message <> WM_QUIT then
   begin
     Handled := False;
     if Assigned(FOnMessage) then FOnMessage(Msg, Handled);
     if not IsHintMsg(Msg) and not Handled and not IsMDIMsg(Msg) and
       not IsKeyMsg(Msg) and not IsDlgMsg(Msg) then
     begin
       TranslateMessage(Msg);
       DispatchMessage(Msg);
     end;
   end
   else
     FTerminate := True;
 end;
end;


Senti   (2005-02-11 17:40:00) [8]

Вот я и спрашиваю ! Как это сделать правильно...Такого цикла пока нет... Если не сложно приведи пример кода


У   (2005-02-11 17:39:00) [9]

вопрос на засыпку: а в этом потоке
цикл выборки сообщений-то есть?
PeakMessage, TranslateMessage, DispatchMessage?


Наверх

Титульная страница Поиск, карта сайта Написать письмо