在C++11/14/17/20中如何实现主线程上运行定时器而不阻塞主线程
如:
startTimerInCurrentTheadWithoutBlockCurrentThread(Seconds(1),[](){
//invoke method every 1 second
method();
});
我知道有很多这样的项目:https://www.fluentcpp.com/2018/12/28/timer-cpp/
但它们都开始了一个新的线索。
有三种主要的方法可以让你等待一段时间:
你似乎不想要前两种方法。 这只会让主线程运行,在某处节省启动时间,并非常定期地调用一个函数:IsitTimeToCallMyFunction()
,例如在主循环中。
这将是非常不雅观的,而且如果主线程中发生了一些冗长的事情,它仍然会使您面临函数调用不够快的问题。
所以,实际上,你的答案是“不”。 编辑:问题被更改为“如何”,因此答案变成了“通过使用上述三种方法之一”。
比方说,您想要并发,但不想要线程。 您也不希望阻塞主线程。
那么答案就远不止于此了。 您需要时间片的协同处理+手动管理。
我认为在两个并发任务之间手动操作并不是一个好主意。 所以我建议你了解一下Coroutines。 C++正在将它合并到标准中,但这仍然不是所有主流编译器或库都完全支持的。 您可以求助于某个第三方库。
然而,为什么不使用线程呢?
编辑:
对不起,我没有仔细阅读。 现在我想你想要的是一个计时器,用来“中断”你当前的任务--也就是当指定的时间已经过去时给你报警。
也许你想调查一下“软件中断”? 据我所知,最直接的方法是向系统提供一个异常处理程序,并在超时时触发中断。