如何创建一个计时器线程函数:timerThreadFunction(pthread_t thread_id),并以安全的方式从其他函数检查计时器的结果:
// Begin of atomic part -- cause i'm in multithreaded environement
if (timerThreadFunction(thread_id) has not expired) {
// SOME WORK HERE
}
else {
// Timer expired
// some work here
}
// End of atomic part
感谢。
答案 0 :(得分:2)
如果您询问互斥部分,可以使用互斥锁来完成此操作。使用pthread_mutex_init to initialize a mutex and pthread_mutex_destroy进行清理。然后使用pthread_mutex_lock and pthread_mutex_unlock获取并释放互斥锁。
编辑根据您在评论中提及的其他帖子的简短(非常简短)查看,我了解到您正在寻找睡眠()的替代方案。一种可能性是使用select()。做这样的事情:
struct timeval sleeptime;
// initialize sleeptime with the desired length such as
memset( &sleeptime, 0, sizeof( sleeptime ));
sleeptime.tv_sec = 5;
select( 0, NULL, NULL, NULL, &sleeptime );
这不会阻止其他线程。但是,您应该注意,select
将返回(如果我没记错的话),如果进程收到任何信号,即使时间尚未结束。
答案 1 :(得分:0)
有很多选项
这应该足以让你开始。