c++ - 经过一定时间后停止 boost::io_service

标签 c++ boost

我有一个 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/

相关文章:

c++ - LNK2019 未解析的外部符号_SDL_Init 在函数_SDL_main 中引用

c++ - 重构后Qt无法解析的外部符号

c++ - 如何组合生成唯一标识符的两个 boost 日志记录宏?

c++ - 使用相同的 boost :thread variable to create multiple threads

c++ - 使用 C++ 线程/boost 线程的有效方法

c++ - GLFW/glfw3.h 包含失败

c++ - 链接 : fatal error LNK1561: entry point must be defined in empty project

c++ - 在编译 boost 时定义 BOOST_DISABLE_ABI_HEADERS 会带来什么危害?

c++ - Boost threads - 处理线程中断的安全/保证方式

c++ - 我可以在异步 io_machine 中使用阻塞 I/O 吗?