URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5622
[ Назад ]

Исходное сообщение
"Ожидание завершения потока."

Отправлено Vladislav Perlin , 08-Авг-06 16:20 
Имеется многопоточное приложение. В настоящий момент при необходимости подождать завершения потока я пользуюсь pthread_join.

Вопрос. Как сделать, чтобы можно было указать ВРЕМЯ ожидания завершения потока --- так, что если поток не завершился за указанное время, ожидание прерывалось бы по таймауту?


Содержание

Сообщения в этом обсуждении
"Ожидание завершения потока."
Отправлено f00l , 09-Авг-06 14:08 
>Имеется многопоточное приложение. В настоящий момент при необходимости подождать завершения потока я
>пользуюсь pthread_join.
>
>Вопрос. Как сделать, чтобы можно было указать ВРЕМЯ ожидания завершения потока ---
>так, что если поток не завершился за указанное время, ожидание прерывалось
>бы по таймауту?


Можно использовать Функции:
  usleep(); /*в микросекундах*/
  sleep();  /*в секундах*/.


"Ожидание завершения потока."
Отправлено Vladislav Perlin , 09-Авг-06 14:50 
>>Имеется многопоточное приложение. В настоящий момент при необходимости подождать завершения потока я
>>пользуюсь pthread_join.
>>
>>Вопрос. Как сделать, чтобы можно было указать ВРЕМЯ ожидания завершения потока ---
>>так, что если поток не завершился за указанное время, ожидание прерывалось
>>бы по таймауту?
>
>
> Можно использовать Функции:
>  usleep(); /*в микросекундах*/
>  sleep();  /*в секундах*/.

Это не совсем то, что надо. Эти функции просто засыпают на указанное время. Но ведь поток может завершиться и раньше. Мне нужно ждать завершения потока НЕ БОЛЕЕ указанного времени.


"Ожидание завершения потока."
Отправлено int_0d , 09-Авг-06 18:51 
>>>Имеется многопоточное приложение. В настоящий момент при необходимости подождать завершения потока я
>>>пользуюсь pthread_join.
>>>
>>>Вопрос. Как сделать, чтобы можно было указать ВРЕМЯ ожидания завершения потока ---
>>>так, что если поток не завершился за указанное время, ожидание прерывалось
>>>бы по таймауту?
>>
>>
>> Можно использовать Функции:
>>  usleep(); /*в микросекундах*/
>>  sleep();  /*в секундах*/.
>
>Это не совсем то, что надо. Эти функции просто засыпают на указанное
>время. Но ведь поток может завершиться и раньше. Мне нужно ждать
>завершения потока НЕ БОЛЕЕ указанного времени.


что если в поток по выходу будет выставлять некое условие, а вы его отлавливать по
pthread_cond_timedwait?


"Ожидание завершения потока."
Отправлено Vladislav Perlin , 09-Авг-06 23:22 
>>>>Имеется многопоточное приложение. В настоящий момент при необходимости подождать завершения потока я
>>>>пользуюсь pthread_join.
>>>>
>>>>Вопрос. Как сделать, чтобы можно было указать ВРЕМЯ ожидания завершения потока ---
>>>>так, что если поток не завершился за указанное время, ожидание прерывалось
>>>>бы по таймауту?
>>>
>>>
>>> Можно использовать Функции:
>>>  usleep(); /*в микросекундах*/
>>>  sleep();  /*в секундах*/.
>>
>>Это не совсем то, что надо. Эти функции просто засыпают на указанное
>>время. Но ведь поток может завершиться и раньше. Мне нужно ждать
>>завершения потока НЕ БОЛЕЕ указанного времени.
>
>
> что если в поток по выходу будет выставлять некое условие, а
>вы его отлавливать по
>pthread_cond_timedwait?

Я думал об этом. Но тут возникают два других вопроса.

1. Если дочерних потоков не один, а N, то мы дождемся ПЕРВОГО завершившегося потока. А если нужно дождаться ПОСЛЕДНЕГО?

Но это не будет существенным, если найти ответ на

2. Если условие наступило, то как определить, в каком (одном или нескольких) именно из дочерних потоков оно наступило?



"Ожидание завершения потока."
Отправлено DeadMustdie , 10-Авг-06 09:16 
Завести счетчик потоков, обеспечить увеличение счетчика при входе в поток
и уменьшение счетчика при выходе из оного. Тогда в любой момент времени
можно точно сказать, сколько потоков живых. Если требуется знать состояние
каждого из потоков, можно дополнительно завести массив статусов.

"Ожидание завершения потока."
Отправлено Аноним , 19-Дек-06 15:03 
>2. Если условие наступило, то как определить, в каком (одном или нескольких)
>именно из дочерних потоков оно наступило?
Завести N флагов, каждому потоку при создании выдавать со склада только один флаг, пусть его дёргает.