是否使用STL实现了TimerCallback库?我无法将Boost依赖项引入到我的项目中。基于标准模板的TimerCallback函数LIbrary without Boost
到期的计时器应该能够回调注册的功能。
是否使用STL实现了TimerCallback库?我无法将Boost依赖项引入到我的项目中。基于标准模板的TimerCallback函数LIbrary without Boost
到期的计时器应该能够回调注册的功能。
有标准库没有具体的计时器,但它是很容易实现一个:利用
#include <thread>
template <typename Duration, typename Function>
void timer(Duration const & d, Function const & f)
{
std::thread([d,f](){
std::this_thread::sleep_for(d);
f();
}).detach();
}
例子:
#include <chrono>
#include <iostream>
void hello() {std::cout << "Hello!\n";}
int main()
{
timer(std::chrono::seconds(5), &hello);
std::cout << "Launched\n";
std::this_thread::sleep_for(std::chrono::seconds(10));
}
要注意的是在功能上的另一个线程调用,所以确保它访问的任何数据都得到适当的保护。
不错的解决方案谢谢你,但是,这只适用于'clang',g ++ 4.8.2说'error:field'timer(const Duration&,const Function&)[with Duration = std :: chrono :: duration
@Avio:将参数改为'&hello',强制转换为指针类型。 (我不确定Clang或GCC是否在这里正确地推断出这种类型,但是这应该使得两者都能做到你想要的)。 – 2014-12-09 13:07:05
海事组织,而不是引入一个库,你可能能够快速,干净地编写自己的计时器。产生一个新的线程,反复调用你的函数,然后使线程休眠一段时间。 – SuperSaiyan 2012-08-01 16:48:48