我想在指定的时间内运行一个循环,但是现在我能想到的就是创建一个基于计时器的线程,并使用一个信号告诉主函数何时最终结束。
要求是我正在寻求能够设置特定量的毫秒计时器,而感兴趣的对象正在整个环境中移动。所以我要说我知道速度,但没有对位置的反馈,我可以预测我在哪个位置。 (即以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();
}
}
这是理想的方法吗?我是否需要一个单独的计时器线程?
答案 0 :(得分:2)
我认为你不需要做单独的线程。
为什么不做这样的事情,这个程序将运行30秒
int t = time(NULL);
int i = 0;
while(t+30 > time(NULL)) {
++i;
// or do whatever in here
}