在Linux中,pthread_join()
函数本身不支持设置超时
#include#include #include #include void *thread_function(void *arg) { printf("Thread started\n"); sleep(5); // 模拟耗时任务 printf("Thread finished\n"); return NULL; } int main() { pthread_t thread_id; int rc; struct timespec timeout; rc = pthread_create(&thread_id, NULL, thread_function, NULL); if (rc != 0) { perror("pthread_create"); exit(EXIT_FAILURE); } timeout.tv_sec = 3; // 设置超时时间为3秒 timeout.tv_nsec = 0; // 使用pthread_timedjoin()等待线程结束,或超时 rc = pthread_timedjoin_np(thread_id, NULL, &timeout); if (rc == ETIMEDOUT) { printf("Thread join timed out\n"); } else if (rc != 0) { perror("pthread_timedjoin_np"); exit(EXIT_FAILURE); } printf("Main thread continues\n"); return 0; }
在这个示例中,我们创建了一个线程,然后使用 pthread_timedjoin_np()
函数等待线程结束,同时设置了一个3秒的超时时间。如果线程在3秒内完成,pthread_timedjoin_np()
将返回0,否则返回 ETIMEDOUT
。