我想要实现以下目标:“主线程必须每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
}
}
答案 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 必须创建一个新线程,但是您还必须管理线程执行的结束时间,除非您将其分离。