Windows CE Threads
От: AntonGr  
Дата: 01.06.09 11:00
Оценка:
Здравствуйте. Разрабатываю программу, которая будет выполняться на Windows CE. В программе выполняетяс несколько потоков. Мне необходимо доождаться пока они все завершатся. В Win32 это реализуется функцией WaitForMultipleObjects с bWaitAll=TRUE, но в CE такой ключ не поддерживается. Подскажите, как можно решить проблему. Была мысль ждать функцией WaitForMultipleObjects пока не просигналит один из потоков, потом вернуть поток в несигнальное состояние. Но как можно HANDLE потока вернуть состояние, в котором он был до окончания работы потока.
Re: Windows CE Threads
От: Аноним  
Дата: 01.06.09 11:06
Оценка:
ждать каждый по очереди
Re[2]: Windows CE Threads
От: AntonGr  
Дата: 01.06.09 11:24
Оценка:
А>ждать каждый по очереди

Делать WaitForSingleObject для каждого потока? А если завершаться они могут не в порядке запуска? Хэндлы потоков хранятся в массиве, его удобно ждать как MultipleObjects.
Re[3]: Windows CE Threads
От: Pavel Dvorkin Россия  
Дата: 01.06.09 13:07
Оценка:
Здравствуйте, AntonGr, Вы писали:

А>>ждать каждый по очереди


AG>Делать WaitForSingleObject для каждого потока? А если завершаться они могут не в порядке запуска?


Ничего страшного, хотя, конечно, я такое никогда не делал

WaitForSingleObject(hThread1,INFINITE);
WaitForSingleObject(hThread2,INFINITE);

Если Thread1 закончится раньше — пройдем первый Wait и будем ждать на втором. Если позже — будем ждать на первом, а дождавшись, тут же пройдем и второй. Хэндлы-то не закрыты, так что потоку в signaled состоянии деваться некуда. А обратно в non-signaled он перейти не может.

Неприятности возможны, когда синхрообъекты повторно используются (ивенты или семафоры). Тут разница между N WaitForSingle и одним WaitForMultiple может всю обедню испортить. Но к потокам это не относится.
With best regards
Pavel Dvorkin
Re[3]: Windows CE Threads
От: Аноним  
Дата: 01.06.09 13:10
Оценка:
AG>Делать WaitForSingleObject для каждого потока? А если завершаться они могут не в порядке запуска? Хэндлы потоков хранятся в массиве, его удобно ждать как MultipleObjects.
Ниче плохого если потоки не ждут друг друга сами еще где нить. В противном порядке просто придется скорректировать порядок ожидания всех.
Re[3]: Windows CE Threads
От: Pzz Россия https://github.com/alexpevzner
Дата: 01.06.09 23:22
Оценка:
Здравствуйте, AntonGr, Вы писали:

AG>Делать WaitForSingleObject для каждого потока? А если завершаться они могут не в порядке запуска? Хэндлы потоков хранятся в массиве, его удобно ждать как MultipleObjects.


Если задача именно "дождаться всех", то все равно, в каком порядке ждать. Если надо еще что-то сделать после завершения потока, и желательно не откладывая, то надо ждать через WaitForMultipleObject, пока не завешится какой-нибудь, потом выкинуть его из списка и ждать, пока не завершится какой-нибудь из оставшихся, и т.д., пока ни одного не останется.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.