![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получать и отправлять сообщение потоком [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?