代码之家  ›  专栏  ›  技术社区  ›  deft_code

从boost::asio::io_服务中删除所有处理程序,而不调用它们

  •  12
  • deft_code  · 技术社区  · 15 年前

    在重用IO_服务之前,我想删除它的所有处理程序。这可能吗?

    asio::io_service . 在每个测试用例之间,我想从全局清除处理程序 io_service . 我以为 io_service::reset 我想那样做,但事实并非如此。 reset() 只允许

    我只需要为单元测试做这些,这样任何疯狂的黑客都可以工作。


    这个 deadline_timer 成员变量。这个 是我正在测试的代码的一部分,因此我无法更改它的构造方式。我掌握了它的位置 io_服务 截止时间计时器 get_io_service

    1 回复  |  直到 15 年前
        1
  •  4
  •   deft_code    15 年前

    嗯,我为此绞尽脑汁了几天,想出了一个可行的解决办法。它是所有黑客之母。

    void clear( boost::asio::io_service& service )
    {
        service.stop();
        service.~io_service();
        new( &service ) boost::asio::io_service;
    }
    

    我不确定这对于生产代码来说有多安全。但到目前为止,它似乎是有效的(没有错误,没有奇怪的行为)。

    推荐文章