我是否需要一个单独的线程来为主程序中的while循环设置计时器?

时间:2015-03-08 01:18:51

标签: c timer

我想在指定的时间内运行一个循环,但是现在我能想到的就是创建一个基于计时器的线程,并使用一个信号告诉主函数何时最终结束。

要求是我正在寻求能够设置特定量的毫秒计时器,而感兴趣的对象正在整个环境中移动。所以我要说我知道速度,但没有对位置的反馈,我可以预测我在哪个位置。 (即以5 rad / s旋转,确定我需要旋转90度的时间)。

可能类似于以下假设程序。

static sem_t timerSem;  
static bool timerExp;
pthread_t th_timer;

static void timersignaldhandler()
{
    sem_post(&timerSem);
}

void *th_timer(void *)
{
      while(!timer_stopped){
            int rc = sem_wait(&timerSem);
            timer_func();
      }
}
void shutdown_timer() 
{
    timerExp = true;
    sem_post(&timerSem);
    pthread_join(th_timer, 0);
}
void timer_func() 
{
    //sleep for x mS

    //Shutdown
    shutdown_timer();
    sem_post(&demo_over);   // signal main thread to exit
}
move()
{
     //Move command
}
int main(int argc, char **argv)
{    
     timerExp = false;
     pthread_create(&th_timer, NULL, th_timer, NULL);


     while(!timerExp)
     {
           move();
     }
}

这是理想的方法吗?我是否需要一个单独的计时器线程?

1 个答案:

答案 0 :(得分:2)

我认为你不需要做单独的线程。

为什么不做这样的事情,这个程序将运行30秒

int t =  time(NULL);
int i = 0;
while(t+30 > time(NULL)) {
   ++i;
   // or do whatever in here
}