Главная страница
    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
Время: 2.858 c
1-1108447918
Dr. Genius
2005-02-15 09:11
2005.02.27
Об использовании DynamicSkinForm и BusinessSkinForm


1-1108047508
Dr. Genius
2005-02-10 17:58
2005.02.27
Графический интерфейс для программ


14-1107726513
Dwarf
2005-02-07 00:48
2005.02.27
хочу всё знать!


6-1103648512
banderas
2004-12-21 20:01
2005.02.27
Сетевое подключение


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