【发布时间】:2016-02-17 20:02:37
【问题描述】:
我正在学习 boost asio 文档。我遇到了这个 deadline_timer 示例。
#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
/*This timer example shows a timer that fires once every second.*/
void print(const boost::system::error_code& e, boost::asio::deadline_timer* t, int* count)
{
if (*count < 5)
{
std::cout << *count << std::endl;
++(*count);
t->expires_at(t->expires_at() + boost::posix_time::seconds(1));
t->async_wait(boost::bind(print,boost::asio::placeholders::error, t, count));
}
}
int main()
{
boost::asio::io_service io;
int count = 0;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(10));
auto myfunc = boost::bind(print, boost::asio::placeholders::error, &t ,&count);
t.async_wait(myfunc);
std::cout << "async wait " << std::endl;
io.run();
std::cout << "Just called io.run() " << std::endl;
std::cout << "Final count is " << count << std::endl;
return 0;
}
async_wait() 函数似乎被阻塞(即等待 10 秒计时器到期)
上述程序的输出如下。
async wait
0
1
2
3
4
Just called io.run()
Final count is 5
我希望 async_wait() 创建一个单独的线程并在那里等待计时器到期,同时执行主线程。
即我希望程序能够打印
Just called io.run()
Final count is 5
在等待计时器到期时。?是不是我的理解错了?
这是我对 async_wait() 的理解。这个实现看起来更像blocking wait。我的理解错了吗?我错过了什么?
【问题讨论】:
-
您期望的输出是什么?从我的角度来看,一切看起来都按照正确的顺序发生。
-
@Xirema - 请查看我对上述问题的编辑。我已经解释了我期望发生的事情。
标签: c++ multithreading boost boost-asio