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

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

потоки [D6, XP]


Страницы:   1 2

Альберт ©   (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, проблема не решается


Страницы:   1 2

Наверх

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