我想编写一个异步计时器,在经过一定时间后调用一个函数。现在我希望能够使用boost::bind()
将函数绑定到计时器在经过一定时间间隔后调用的任何签名。我现在这样做的方式受到boost线程的启发,它有一些抽象的基类来存储线程函数。这就是我的工作:
class TimedFunctionBase
{
public:
virtual void call() = 0;
};
typedef std::shared_ptr<TimedFunctionBase> TimedFunctionBasePtr;
template<class F>
class TimedFunction : public TimedFunctionBase
{
public:
TimedFunction(F _f):
m_function(_f)
{
}
void call()
{
m_function();
}
private:
F m_function;
};
然后,在timer函数内部,我只需按如下方式保存回调:
MyAsyncTimer
{
private:
TimedFunctionBasePtr m_callback;
};
并使用
在定时函数内调用它m_callback->call();
我的问题其实非常简单:增强功能是否已经提供了这样做的机制?经过长时间的搜索,我找不到多少内容,boost::thread
的内部也看起来好像没有为此类用途预定义。也许boost::function_base
?文档说你可能不会直接创建它。是否有提升方式,或者我是否必须自己编写这些容器类?
答案 0 :(得分:5)
boost :: bind + boost :: function就是你所需要的。和IIRC,这就是线程所做的。
答案 1 :(得分:0)
我认为boost :: asio提供了一些机制来执行此操作,这tutorial似乎正是您想要的。