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

Вниз

потоки   Найти похожие ветки 

 
Альберт ©   (2007-10-07 23:06) [0]

создаю окно. делаю 2 потока

procedure createMainWindow;
...
begin
...
Handle:=CreateWindowEx ( ... )
end;

procedure WaitMainWindow(Param: Integer); stdcall;
begin

 While GetMessage(Mesg,0,0,0) do
begin
 TranslateMessage(Mesg);
 DispatchMessage(Mesg);
 messagebox(0,0,0,0);
end;

end;

procedure WaitAnotherWindow(Param: Integer); stdcall;
begin

...

end;

var hThread: array [1..2] of THandle;
   dwThreadId: array [1..2] of Cardinal;

...
createMainWindow;

hThread[1]:= CreateThread(nil,0,@WaitMainWindow,0,0, dwThreadId[1]); .. НЕ работает
hThread[2]:= CreateThread(nil,0,@WaitAnotherWindow,0,0, dwThreadId[2]); // работает
WaitForMultipleObjects(MAX_THREADS,@hThread,FALSE,INFINITE);

CloseHandle(hThread[1]);
CloseHandle(hThread[2]);

подскажите, плз, почему сообщения не обрабатываются?


 
DVM ©   (2007-10-07 23:13) [1]

MessageBox убери


 
Альберт ©   (2007-10-07 23:17) [2]

там и без MessageBox"a не идет

WaitForMultipleObjects(MAX_THREADS,@hThread,FALSE,INFINITE); - вместо FALSE ставя TRUE, проблема не решается


 
DrPass ©   (2007-10-07 23:24) [3]

А почему они длжны обрабатываться, если окно ты создаешь в главном потоке, а GetMessage вызываешь из дополнительных?


 
DVM ©   (2007-10-07 23:26) [4]


> Альберт ©

stdcall зачем написал?


 
DVM ©   (2007-10-07 23:27) [5]


> DrPass ©   (07.10.07 23:24) [3]

кстати, да


> Альберт ©  

Зачем у тебя в потоковой функции цикл сообщений?


 
DrPass ©   (2007-10-07 23:30) [6]


> stdcall зачем написал?

stdcall там как раз к месту


 
DVM ©   (2007-10-07 23:33) [7]


> stdcall там как раз к месту

без него все будет работать


 
DrPass ©   (2007-10-07 23:37) [8]


> DVM ©   (07.10.07 23:33) [7]
>
> > stdcall там как раз к месту
>
> без него все будет работать

А еще без CloseHandle будет, да и деструкторы у объектов вызывать не надо - все равно все будет работать, так, по-твоему?


 
DVM ©   (2007-10-07 23:37) [9]


> > stdcall там как раз к месту
>
> без него все будет работать

А так у него там CreateThread. Я о BeginThread думал.


 
Альберт ©   (2007-10-07 23:37) [10]

Спасибо, ребят! там как раз и была ошибка в то, что я цикл сообщений в потоке обрабатывал.


 
DVM ©   (2007-10-07 23:42) [11]


> да и деструкторы у объектов вызывать не надо

Деструкторы у объектов вызывать конечно надо, но не в коде из вопроса :)


> так, по-твоему?

По-моему там вообще ерунда написана. Вопросы буквально к каждой строчке.


> Альберт ©

Раз уж ты стал применять CreateThread вместо BeginThread то не забудь флаг IsMultiThread := TRUE; выставить


 
Альберт ©   (2007-10-07 23:48) [12]


> По-моему там вообще ерунда написана. Вопросы буквально к
> каждой строчке.

а как вообще потоки-то оформлять?


 
DVM ©   (2007-10-07 23:51) [13]


> а как вообще потоки-то оформлять?

чего ты от потоков добиться хочешь в своей программе?


 
Альберт ©   (2007-10-08 00:02) [14]

программа типа сервера виджетов (или называйте miniApps).
она создает LayeredWindows. они позволяют запустить другие программы. в этих других программах предусмотрено и закрытие виджета.


 
DVM ©   (2007-10-08 10:36) [15]


> Альберт ©   (08.10.07 00:02) [14]

и зачем тут потоки?


 
Альберт ©   (2007-10-08 16:13) [16]

одно приложение создает несколько окон


 
MBo ©   (2007-10-08 16:19) [17]

>одно приложение создает несколько окон
Это не означает, что нужно несколько потоков


 
DVM ©   (2007-10-08 16:44) [18]


> одно приложение создает несколько окон

Настоятельно рекомендую создавать все окна в одном (первичном) потоке. Все будет прекрасно работать и с одним потоком и одним циклом сообщений.


 
Альберт ©   (2007-10-08 20:06) [19]

приведите плз пример.


 
MetalFan ©   (2007-10-08 20:33) [20]


> приведите плз пример.

интересно, додуматься до нескольких потоков смог, а в одном потоке сделать н-ко окон - нет.
http://msdn2.microsoft.com/en-us/library/ms644928.aspx


 
Альберт ©   (2007-10-08 20:38) [21]

ой да не говори!) за ссылку спасибо!



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

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

Наверх




Память: 0.51 MB
Время: 0.02 c
15-1190873947
F@T@L_Err0r
2007-09-27 10:19
2007.10.28
Ctrl+Alt+Del


2-1191515645
Windows
2007-10-04 20:34
2007.10.28
Borland Delphi 6 + asm


2-1191476507
PL
2007-10-04 09:41
2007.10.28
Результат трассировки и скомп. exe разные - почему?


15-1190126099
alex_ant
2007-09-18 18:34
2007.10.28
Поможет ли тут система сопровождения версий?


15-1191066703
TurboDelphi_Help
2007-09-29 15:51
2007.10.28
Что качать?