我有一个 boost::asio::io_service 正在做一些工作。现在我想在一段时间后停止这项服务。我的第一种方法是使用 boost::thread(io_service.run())
,但随后出现错误。
还有其他方法可以停止 io_service 吗?
谢谢!
最佳答案
您可以使用deadline_timer
。
您还可以像您尝试的那样在另一个线程上运行该服务:
boost::thread t = boost::thread(boost::bind(&boost::asio::io_service::run, boost::ref(io_service));
// sometime
io_service.stop(); // io_service is threadsafe
t.join();
这是一个用 C++03 完成的 Deadline_timer 示例: Live On Coliru
#include <boost/asio.hpp>
#include <boost/thread.hpp>
#include <boost/asio/deadline_timer.hpp>
#include <iostream>
using namespace boost::asio;
using namespace boost;
io_service svc;
deadline_timer timer(svc);
void work()
{
this_thread::sleep_for(chrono::milliseconds(100));
std::cout << "Work done, rescheduling\n";
svc.post(work);
}
void expiration_handler(system::error_code ec)
{
if (ec != error::operation_aborted)
svc.stop();
}
int main()
{
svc.post(work);
timer.expires_from_now(posix_time::seconds(2));
timer.async_wait(expiration_handler);
svc.run();
}
这会打印
Work done, rescheduling
直到2秒后到达截止时间
关于c++ - 经过一定时间后停止 boost::io_service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22658699/