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

Вниз

Форма VCL и многопоточность...   Найти похожие ветки 

 
Eraser ©   (2005-02-02 17:06) [0]

Добрый день всем!
Хочу уточнить одну деталь.
Есть ли способ создать форму при помощи VCL в другом потоке, подозреваю что нету, но может у кого нибудь есть спец. компонент для этого (форма нужна чисто для приёма сообщений).
Уж очень не охота писать очередь сообщений.


 
Reindeer Moss Eater ©   (2005-02-02 17:13) [1]

Зачем форма для этого?
Окна не достаточно?


 
Digitman ©   (2005-02-02 17:34) [2]


> Уж очень не охота писать очередь сообщений


ты и не напишешь ее.
ибо это - епархия системы.
а вот цикл ожидания/выборки/диспетчеризации/обработки сообщений из очереди - эт запросто.
и ничего там сложного нет.

var
 Msg: TMsg;
..
while GetMessage(Msg, 0, 0, 0) do
 if Msg.hWnd <> 0 then
   begin
     TranslateMessage(Msg);
     Dispatchmessage(Msg);
   end
 else
   Dispatch(Msg.Message);


 
Eraser ©   (2005-02-02 18:16) [3]

Reindeer Moss Eater ©

Как всегда я не правильно выразился! Конечно нужно создать просто окно.

Digitman ©
Наверное так и сделаю.


 
Reindeer Moss Eater ©   (2005-02-02 18:31) [4]

uses Classes;

type TWndMethod = procedure(var Message: TMessage) of object;

function AllocateHWnd(Method: TWndMethod): HWND;


 
Набережных С. ©   (2005-02-02 19:29) [5]

>Reindeer Moss Eater ©   (02.02.05 18:31) [4]

А что, AllocateHWnd потокобезопасна?

>Eraser ©   (02.02.05 18:16) [3]

Сообщения можно отправлять не только окну, но и непосредственно в очередь потока посредством PostThreadMessage.


 
Eraser ©   (2005-02-02 20:17) [6]

Набережных С. ©//

А как перехватить очередб потока?


 
Набережных С. ©   (2005-02-02 20:32) [7]

>Eraser ©   (02.02.05 20:17) [6]

См. Digitman ©   (02.02.05 17:34) [2]

Только параметр Msg.hWnd в этом случае будет равен нулю.


 
Набережных С. ©   (2005-02-02 20:35) [8]

Точнее нужно только вот это:

while GetMessage(Msg, 0, 0, 0) do
begin
здесь обработка сообщений
end;


 
Набережных С. ©   (2005-02-02 20:37) [9]

И когда поток получит WM_QUIT, GetMessage вернет false.


 
Eraser ©   (2005-02-02 20:42) [10]

Спасибо! Теперь всё понятно.



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

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

Наверх




Память: 0.49 MB
Время: 0.05 c
6-1105978255
vers
2005-01-17 19:10
2005.03.20
Файрвол


14-1109743012
Думкин
2005-03-02 08:56
2005.03.20
Живой и разговаривающий я


1-1110130168
Checist [root]
2005-03-06 20:29
2005.03.20
TTreeView


1-1109783918
oleg_SYS
2005-03-02 20:18
2005.03.20
Как присвоить типу OleVariant адресс процедуры?


3-1108641732
Shizuku
2005-02-17 15:02
2005.03.20
Report for iBx