如何在c中创建计时器线程

时间:2011-01-14 21:17:00

标签: c multithreading timer pthreads

如何创建一个计时器线程函数: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

感谢。

2 个答案:

答案 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)

有很多选项

  1. 不要使用单独的线程,只需轮询一些内部计时器。
  2. 让你的计时器线程完成并将你的主线程连接到计时器线程。
  3. 使用信号量
  4. 使用互斥锁保护标志。
  5. 这应该足以让你开始。