【发布时间】:2010-10-25 16:34:40
【问题描述】:
我正在开发一个使用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() 变体来做到这一点?
【问题讨论】:
标签: c multithreading pthreads sleep usleep