linux pthread 运行 在指定时间的循环中(避免信号)

linux pthread running in a loop for specified time (avoiding signals)

你好我想做的是: 线程 (pthread.h) 需要在 while 循环中执行代码一段时间,该时间段将定义在 运行 时间
之后线程将正确完成最后一个循环并继续进行其他工作。 现在我正在使用信号:这是循环

setTimer(sec);
while(flag)
{
   //do some work
}
// continue to run

并且我使用信号来调用将标志设置为 false 的函数:

void setTimer(int sec)
{
  struct sigaction sa;
  struct itimerval timer;

  memset (&sa, 0, sizeof (sa));
  sa.sa_handler = &alarm_end_of_loop; // this is the function to change flag to false
  sigaction (SIGVTALRM, &sa, NULL);

  timer.it_value.tv_sec = sec;
  timer.it_value.tv_usec = 0;

  timer.it_interval.tv_sec = 0;
  timer.it_interval.tv_usec = 0;


  setitimer (ITIMER_REAL, &timer, NULL);
}

void alarm_end_of_loop()
{
flag = 0; //flag is global but only one thread will access it
}

我的问题是有没有办法避免使用信号?

似乎是超时模式。

double get_delta_time_to_now(const time_t timeout_time)
{
    time_t now;
    time(&now);
    return difftime(now, timeout_time);
}

void do_it(int sec)
{
    time_t timeout_time;
    double diff;

    time(&timeout_time);
    timeout_time += sec; /* this is not necessarily correct */

    diff = get_delta_time_to_now(timeout_time);
    while (diff <= 0.0)
    {
        /* do your stuff */

        diff = get_delta_time_to_now(timeout_time);
    }
}