我正在开发一个使用POSIX Threads的多线程应用程序。我正在使用线程来执行定期工作,为此我正在使用usleep(3)来暂停线程执行。我的问题是如何从主线程取消 usleep() 计时器,我尝试过,pthread_kill(thread, SIGALRM)
但它具有全局影响,导致主应用程序终止(默认情况下)。这是我的伪代码:
void threaded_task(void *ptr) {
initialize();
while(running) {
do_the_work();
usleep(some_interval);
}
clean_up();
release_resources();
}
这是用于从主线程停止(并正常关闭)给定线程的伪函数:
void stop_thread(pthread_t thread) {
set_running_state(thread, 0); // Actually I use mutex staff
// TODO: Cancel sleep timer so that I will not wait for nothing.
// Wait for task to finish possibly running work and clean up
pthread_join(thread, NULL);
}
实现我的目标的便捷方式是什么?我必须使用条件变量还是可以使用 sleep() 变体来做到这一点?