![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
потоки [D6, XP]
Альберт © (2007-10-07 23:06:00)создаю окно. делаю 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]);
подскажите, плз, почему сообщения не обрабатываются?
Альберт (2007-10-08 20:38:00) [1]ой да не говори!) за ссылку спасибо!
MetalFan (2007-10-08 20:33:00) [2]
> приведите плз пример.
интересно, додуматься до нескольких потоков смог, а в одном потоке сделать н-ко окон - нет.
http://msdn2.microsoft.com/en-us/library/ms644928.aspx
Альберт (2007-10-08 20:06:00) [3]приведите плз пример.
DVM (2007-10-08 16:44:00) [4]
> одно приложение создает несколько окон
Настоятельно рекомендую создавать все окна в одном (первичном) потоке. Все будет прекрасно работать и с одним потоком и одним циклом сообщений.
MBo (2007-10-08 16:19:00) [5]>одно приложение создает несколько окон
Это не означает, что нужно несколько потоков
Альберт (2007-10-08 16:13:00) [6]одно приложение создает несколько окон
DVM (2007-10-08 10:36:00) [7]
> Альберт © (08.10.07 00:02) [14]
и зачем тут потоки?
Альберт (2007-10-08 00:02:00) [8]программа типа сервера виджетов (или называйте miniApps).
она создает LayeredWindows. они позволяют запустить другие программы. в этих других программах предусмотрено и закрытие виджета.
DVM (2007-10-07 23:51:00) [9]
> а как вообще потоки-то оформлять?
чего ты от потоков добиться хочешь в своей программе?
Альберт (2007-10-07 23:48:00) [10]
> По-моему там вообще ерунда написана. Вопросы буквально к
> каждой строчке.
а как вообще потоки-то оформлять?
DVM (2007-10-07 23:42:00) [11]
> да и деструкторы у объектов вызывать не надо
Деструкторы у объектов вызывать конечно надо, но не в коде из вопроса :)
> так, по-твоему?
По-моему там вообще ерунда написана. Вопросы буквально к каждой строчке.
> Альберт ©
Раз уж ты стал применять CreateThread вместо BeginThread то не забудь флаг IsMultiThread := TRUE; выставить
Альберт (2007-10-07 23:37:00) [12]Спасибо, ребят! там как раз и была ошибка в то, что я цикл сообщений в потоке обрабатывал.
DVM (2007-10-07 23:37:00) [13]
> > stdcall там как раз к месту
>
> без него все будет работать
А так у него там CreateThread. Я о BeginThread думал.
DrPass (2007-10-07 23:37:00) [14]
> DVM © (07.10.07 23:33) [7]
>
> > stdcall там как раз к месту
>
> без него все будет работать
А еще без CloseHandle будет, да и деструкторы у объектов вызывать не надо - все равно все будет работать, так, по-твоему?
DVM (2007-10-07 23:33:00) [15]
> stdcall там как раз к месту
без него все будет работать
DrPass (2007-10-07 23:30:00) [16]
> stdcall зачем написал?
stdcall там как раз к месту
DVM (2007-10-07 23:27:00) [17]
> DrPass © (07.10.07 23:24) [3]
кстати, да
> Альберт ©
Зачем у тебя в потоковой функции цикл сообщений?
DVM (2007-10-07 23:26:00) [18]
> Альберт ©
stdcall зачем написал?
DrPass (2007-10-07 23:24:00) [19]А почему они длжны обрабатываться, если окно ты создаешь в главном потоке, а GetMessage вызываешь из дополнительных?
Альберт (2007-10-07 23:17:00) [20]там и без MessageBox'a не идет
WaitForMultipleObjects(MAX_THREADS,@hThread,FALSE,INFINITE); - вместо FALSE ставя TRUE, проблема не решается