我有一个问题,同时使用deadline_timer和io_service对象::交如下:使用io_service对象::交(增压)时deadline_timer等待
#include "boost/asio.hpp"
#include "boost/thread.hpp"
int main()
{
boost::asio::io_service io_service;
boost::asio::deadline_timer timer1(io_service);
boost::asio::deadline_timer timer2(io_service);
timer1.expires_from_now(boost::posix_time::seconds(1));
timer1.async_wait([](const boost::system::error_code& error) {
boost::this_thread::sleep(boost::posix_time::seconds(5));
printf("1 ");
});
timer2.expires_from_now(boost::posix_time::seconds(2));
timer2.async_wait([](const boost::system::error_code& error) {
printf("2 ");
});
boost::thread t([&io_service]() {
boost::this_thread::sleep(boost::posix_time::seconds(5));
io_service.post([]() {
printf("3 ");
});
io_service.post([]() {
printf("4 ");
});
});
io_service.run();
t.join();
getchar();
return 0;
}
我认为吼声的结果是“1 2 3 4”,但结果是“1 3 4 2”。任何人都可以告诉我如何使用boost库(以及不更改timer1和timer2的过期时间)之前执行timer2(print“2”)的回调,结果为“1 2 3 4”。
非常感谢!
** **⚠没有返工调用链或修改的计时器,它在很大程度上依赖于实施细节极其脆弱的解决方案可在[这里](http://coliru.stacked-crooked.com/a/0524433bb0bdcf71)**⚠** –