Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.044 c
9-1100340108
VolanD666
2004-11-13 13:01
2005.02.27
Timer в Builder.


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


1-1108324327
mr-jack
2005-02-13 22:52
2005.02.27
события и всё такое


3-1106753831
Muchacho
2005-01-26 18:37
2005.02.27
совместимость с 1C


1-1108464327
Checist [root]
2005-02-15 13:45
2005.02.27
Новая форма!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский