Главная страница
    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.46 MB
Время: 0.049 c
14-1107787760
juice
2005-02-07 17:49
2005.02.27
С++ Классы


14-1107891150
bopmy
2005-02-08 22:32
2005.02.27
Работа со сканерами штрихкода


1-1108480732
Kubic
2005-02-15 18:18
2005.02.27
иконка в TDrawGrid


9-1096370533
Colt1978
2004-09-28 15:22
2005.02.27
Ландшафт ?!?


1-1108135492
Doxygen
2005-02-11 18:24
2005.02.27
Версия Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский