Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Форма VCL и многопоточность... [D7, WinXP]


Eraser ©   (2005-02-02 17:06:00) 

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


Eraser   (2005-02-02 20:42:00) [1]

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


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

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


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

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

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


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

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

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

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


Eraser   (2005-02-02 20:17:00) [5]

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

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


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

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

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

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

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


Reindeer Moss Eater   (2005-02-02 18:31:00) [7]

uses Classes;

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

function AllocateHWnd(Method: TWndMethod): HWND;


Eraser   (2005-02-02 18:16:00) [8]

Reindeer Moss Eater ©

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

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


Digitman   (2005-02-02 17:34:00) [9]


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


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

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);


Reindeer Moss Eater   (2005-02-02 17:13:00) [10]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо