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

Вниз

Форма 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.038 c
4-1107175032
mbIkola
2005-01-31 15:37
2005.03.20
NT как получить имя пользователя запустившего процесс?


1-1109933326
MTsv DN
2005-03-04 13:48
2005.03.20
LIB -> OBJ


1-1109919297
Fktrc
2005-03-04 09:54
2005.03.20
Исключение в деструкторе треда при попытке протрассировать его


6-1104355091
XProger
2004-12-30 00:18
2005.03.20
WinSock и прокси


1-1110191393
mf
2005-03-07 13:29
2005.03.20
Отладка программы





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