C++ 在一定时间后停止boost::io_服务
我有一个boost::asio::io_服务,它正在做一些工作。现在,我想在一段时间后停止此服务。我的第一种方法是使用C++ 在一定时间后停止boost::io_服务,c++,boost,C++,Boost,我有一个boost::asio::io_服务,它正在做一些工作。现在,我想在一段时间后停止此服务。我的第一种方法是使用boost::thread(io_service.run()),但随后会出现错误。 是否有其他方法停止io_服务? 谢谢大家! 不是吗 使用 不是吗 使用 您可以使用截止时间\u计时器 您还可以在另一个线程上运行服务,就像您尝试的那样: boost::thread t = boost::thread(boost::bind(&boost::asio::io_ser
boost::thread(io_service.run())
,但随后会出现错误。是否有其他方法停止io_服务?
谢谢大家! 不是吗
使用 不是吗
使用
您可以使用
截止时间\u计时器
您还可以在另一个线程上运行服务,就像您尝试的那样:
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完成的截止期计时器示例:
#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();
}
在2秒后到达截止日期之前您可以使用
截止日期计时器
您还可以在另一个线程上运行服务,就像您尝试的那样:
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完成的截止期计时器示例:
#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();
}
直到2秒后到达截止日期否。因为您正在阻塞
io\u service.run()
。是的,更像是这样。我的版本不需要c++11though@sehe我非常喜欢c++11>oNope。因为您正在阻塞io\u service.run()
。是的,更像是这样。我的版本不需要c++11though@sehe我非常喜欢c++11>o
Work done, rescheduling