Ожидание завершения потока с ограничением по времени
#include <pthread.h>int pthread_timedjoin( pthread_t thread,void **value_ptr,const struct timespec *abstime );int pthread_timedjoin_monotonic( pthread_t thread,void **value_ptr,const struct timespec *abstime );
NULL
или указатель на переменную, где функция может хранить значение, которое возвращает pthread_exit().libc
Функции pthread_timedjoin() и pthread_timedjoin_monotonic() аналогичны pthread_join() за тем исключением, что возвращают статус ETIMEDOUT
, если превышено максимальное время ожидания abstime (например, если системное время равно или больше величины abstime):
Функция pthread_timedjoin_monotonic() использует CLOCK_MONOTONIC
и ее таймаут не зависит от изменений системного времени.
Обе функции блокируют вызывающий поток в ожидании терминирования потока thread до тех пор, пока последний не терминируется. Если указатель value_ptr не равен NULL
и pthread_join() завершается успешно, то по этому адресу записывается аргумент функции pthread_exit(). Если целевой поток прерывается, а не завершается, value_ptr устанавливается в значение PTHREAD_CANCELED
.
Целевой поток должен иметь статус joinable. Множественный вызов pthread_join(), pthread_timedjoin(), ThreadJoin() и ThreadJoin_r() на один и тот же поток не допускается. Если pthread_timedjoin() или pthread_timedjoin_monotonic() завершается успешно – это означает, что поток завершился успешно.
ЗОСРВ «Нейтрино»
pthread_create(), pthread_detach(), pthread_exit(), pthread_join(), ThreadJoin(), ThreadJoin_r(), struct timespec
Предыдущий раздел: Описание API системной библиотеки