[英]Make a Timer with boost::asio::deadline_timer
我想用 boost::asio::deadline_timer 制作一個 Timer 類。 我研究了這個: 如何讓 boost/asio 庫重復計時器?
class DeadlineTimer
{
boost::asio::io_service io;
std::function<void()> fun;
boost::asio::deadline_timer t;
void runTimer()
{
fun();
t.expires_at(t.expires_at() + boost::posix_time::seconds(2));
t.async_wait(boost::bind(&DeadlineTimer::runTimer, this));
}
public:
DeadlineTimer() :t(io, boost::posix_time::seconds(2)){}
void setFunction(std::function<void()> _f)
{
fun = _f;
}
void run()
{
io.run();
}
};
void test()
{
DeadlineTimer timer1;
auto f = []() {
cout << "hello world\n";
};
timer1.setFunction(f);
timer1.run();
}
它允許用戶通過timer1.setFunction(f);
傳遞一個自定義的定時器函數timer1.setFunction(f);
. 然后重復運行它(在當前情況下每2秒一次)。
但它不起作用,根本沒有輸出。
經過一些反復試驗,我設法更新了 David Wyles 的 boost::asio::repeating_timer 類以使用 Boost >= 1.66 - 這巧妙地封裝了重復計時器的功能。 在線https://github.com/mikehaben69/boost ,包括演示源和生成文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.