Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.27;
Скачать: CL | DM;

Вниз

Как получать и отправлять сообщение потоком   Найти похожие ветки 

 
Senti   (2005-02-11 17:24) [0]

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

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

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


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

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


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

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


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

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:56) [4]

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


 
У   (2005-02-11 18:05) [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 18:11) [6]

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

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

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


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

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:25) [8]

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


 
Leonid Troyanovsky ©   (2005-02-11 21:09) [9]


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


SleepEx, QueueUserAPC.

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2005.02.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.041 c
3-1106940759
UVV
2005-01-28 22:32
2005.02.27
dbExpress бесплатные компоненты или нет?


3-1106661255
БаТоН
2005-01-25 16:54
2005.02.27
Какой сервер и способ обращения выбрать?


1-1108096914
alex_007
2005-02-11 07:41
2005.02.27
Кикаем юзера в локалке


9-1100792394
Da Stranger
2004-11-18 18:39
2005.02.27
Проект трёхмерной космической стратегии реального времени.


3-1107163259
Bless
2005-01-31 12:20
2005.02.27
Проблемка с кодом возврата хранимой процедуры в Delphi