用C ++定期创建线程

时间:2019-05-09 12:56:25

标签: c++ multithreading timer

我想要实现以下目标:“主线程必须每3分钟创建一个子线程。子线程应独立运行,并且主线程必须继续其正常执行,并且一旦子线程完成,就应退出。 ” 这是我到目前为止所做的:

void thread_timer(std::function<void(void)> func, unsigned int interval) {
    std::thread([func, interval]()
    { 
       while (true)
      { 
         auto x = std::chrono::steady_clock::now() + std::chrono::milliseconds(interval);
         func();
         std::this_thread::sleep_until(x);
      }
    }).detach();
}

void foo()
{
   std::cout<<"Doing something...";
}

main_thread_func()
{
   // Doing some task
   while(1) { 
      thread_timer(foo, 180000); // Should be executed every 3mins
      // do some task
   }
}

1 个答案:

答案 0 :(得分:0)

只说说这段时间

  while (true)
 { 
    auto x = std::chrono::steady_clock::now() + std::chrono::milliseconds(interval);
    func();
    std::this_thread::sleep_until(x);
 }

您不会每3分钟执行一次 func ,而是每3分钟+ func-execution-time

使用类似的方法可以

auto x = std::chrono::steady_clock::now();

while (true)
{
   x += std::chrono::milliseconds(interval);
   func();
   std::this_thread::sleep_until(x);
}

如果确定 func 的执行时间少于3分钟,则您必须选择放宽周期或使用当前值更新 x 时间

现在,您的 func 必须创建一个新线程,但是您还必须管理线程执行的结束时间,除非您将其分离。