C++ 在一定时间后停止boost::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::asio::io_服务,它正在做一些工作。现在,我想在一段时间后停止此服务。我的第一种方法是使用
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