Текущий архив: 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.49 MB
Время: 0.041 c