在 JavaScript 中,有一个名为 setInterval()
的函数。可以用C++实现吗?如果使用循环,程序不会继续,而是继续调用函数。
while(true) {
Sleep(1000);
func();
}
cout<<"Never printed";
最佳答案
C++ 中没有内置setInterval
。你可以用异步函数模仿这个函数:
template <class F, class... Args>
void setInterval(std::atomic_bool& cancelToken,size_t interval,F&& f, Args&&... args){
cancelToken.store(true);
auto cb = std::bind(std::forward<F>(f),std::forward<Args>(args)...);
std::async(std::launch::async,[=,&cancelToken]()mutable{
while (cancelToken.load()){
cb();
std::this_thread::sleep_for(std::chrono::milliseconds(interval));
}
});
}
使用cancelToken
取消间隔
cancelToken.store(false);
请注意,此机制为任务构建了一个新线程。它不适用于许多区间函数。在这种情况下,我会使用已经编写好的线程池和某种时间测量机制。
编辑:示例使用:
int main(int argc, const char * argv[]) {
std::atomic_bool b;
setInterval(b, 1000, printf, "hi there\n");
getchar();
}
关于c++ - 在 C++ 中使用 setInterval(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33234403/