Имеется многопоточное приложение. В настоящий момент при необходимости подождать завершения потока я пользуюсь pthread_join.Вопрос. Как сделать, чтобы можно было указать ВРЕМЯ ожидания завершения потока --- так, что если поток не завершился за указанное время, ожидание прерывалось бы по таймауту?
>Имеется многопоточное приложение. В настоящий момент при необходимости подождать завершения потока я
>пользуюсь pthread_join.
>
>Вопрос. Как сделать, чтобы можно было указать ВРЕМЯ ожидания завершения потока ---
>так, что если поток не завершился за указанное время, ожидание прерывалось
>бы по таймауту?
Можно использовать Функции:
usleep(); /*в микросекундах*/
sleep(); /*в секундах*/.
>>Имеется многопоточное приложение. В настоящий момент при необходимости подождать завершения потока я
>>пользуюсь pthread_join.
>>
>>Вопрос. Как сделать, чтобы можно было указать ВРЕМЯ ожидания завершения потока ---
>>так, что если поток не завершился за указанное время, ожидание прерывалось
>>бы по таймауту?
>
>
> Можно использовать Функции:
> usleep(); /*в микросекундах*/
> sleep(); /*в секундах*/.Это не совсем то, что надо. Эти функции просто засыпают на указанное время. Но ведь поток может завершиться и раньше. Мне нужно ждать завершения потока НЕ БОЛЕЕ указанного времени.
>>>Имеется многопоточное приложение. В настоящий момент при необходимости подождать завершения потока я
>>>пользуюсь pthread_join.
>>>
>>>Вопрос. Как сделать, чтобы можно было указать ВРЕМЯ ожидания завершения потока ---
>>>так, что если поток не завершился за указанное время, ожидание прерывалось
>>>бы по таймауту?
>>
>>
>> Можно использовать Функции:
>> usleep(); /*в микросекундах*/
>> sleep(); /*в секундах*/.
>
>Это не совсем то, что надо. Эти функции просто засыпают на указанное
>время. Но ведь поток может завершиться и раньше. Мне нужно ждать
>завершения потока НЕ БОЛЕЕ указанного времени.
что если в поток по выходу будет выставлять некое условие, а вы его отлавливать по
pthread_cond_timedwait?
>>>>Имеется многопоточное приложение. В настоящий момент при необходимости подождать завершения потока я
>>>>пользуюсь pthread_join.
>>>>
>>>>Вопрос. Как сделать, чтобы можно было указать ВРЕМЯ ожидания завершения потока ---
>>>>так, что если поток не завершился за указанное время, ожидание прерывалось
>>>>бы по таймауту?
>>>
>>>
>>> Можно использовать Функции:
>>> usleep(); /*в микросекундах*/
>>> sleep(); /*в секундах*/.
>>
>>Это не совсем то, что надо. Эти функции просто засыпают на указанное
>>время. Но ведь поток может завершиться и раньше. Мне нужно ждать
>>завершения потока НЕ БОЛЕЕ указанного времени.
>
>
> что если в поток по выходу будет выставлять некое условие, а
>вы его отлавливать по
>pthread_cond_timedwait?Я думал об этом. Но тут возникают два других вопроса.
1. Если дочерних потоков не один, а N, то мы дождемся ПЕРВОГО завершившегося потока. А если нужно дождаться ПОСЛЕДНЕГО?
Но это не будет существенным, если найти ответ на
2. Если условие наступило, то как определить, в каком (одном или нескольких) именно из дочерних потоков оно наступило?
Завести счетчик потоков, обеспечить увеличение счетчика при входе в поток
и уменьшение счетчика при выходе из оного. Тогда в любой момент времени
можно точно сказать, сколько потоков живых. Если требуется знать состояние
каждого из потоков, можно дополнительно завести массив статусов.
>2. Если условие наступило, то как определить, в каком (одном или нескольких)
>именно из дочерних потоков оно наступило?
Завести N флагов, каждому потоку при создании выдавать со склада только один флаг, пусть его дёргает.