相关疑难解决方法(0)

asio 1.11.0独立包装不正确......还是我?

鉴于以下测试计划:

#include <asio.hpp>
#include <cassert>

int main()
{
    asio::io_service ios1, ios2;
    asio::io_service::strand s2(ios2);

    auto test_func = wrap(s2, [&] {
        assert(s2.running_in_this_thread());
    });

    auto wrap_test_func = wrap(ios1, test_func);

    wrap_test_func();

    ios1.run_one();
    ios2.run_one();

}
Run Code Online (Sandbox Code Playgroud)

我的理解是这个程序不应断言.

wrap_test_func被包裹进去io_service ios1.它包装的功能被包装strand s2(使用ios2).

根据我的理解,调用wrap_test_func应该等于dispatch(ios1, test_func)哪个应该发送lambda in s2).

但是,看起来好像包裹已打开内包装.

这是预期的行为吗?

c++ boost-asio

6
推荐指数
1
解决办法
377
查看次数

什么时候必须将 io_context 传递给 boost::asio::spawn?(C++)

我惊讶地发现下面的代码无需io_context作为第一个参数传递给spawn. 有人可以解释一下为什么在这种情况下我不需要通过它,以及在什么情况下你必须明确通过它。我正在使用 Boost 1.75.0

#include <boost/asio/spawn.hpp>
#include <boost/asio/deadline_timer.hpp>
#include <iostream>

int main() {

  boost::asio::io_context io_context;
  boost::asio::deadline_timer timer(io_context);

  boost::asio::spawn([&](boost::asio::yield_context yield){ // don't need to pass io_context?!
    std::cout << "started spawn" << std::endl;
    timer.expires_from_now(boost::posix_time::seconds(5));
    timer.async_wait(yield);
    std::cout << "finished spawn" << std::endl;
  });

  std::cout << "running io_context" << std::endl;
  io_context.run();
  std::cout << "finished running io_context" << std::endl;

}
Run Code Online (Sandbox Code Playgroud)

c++ boost asynchronous boost-asio c++11

4
推荐指数
1
解决办法
1722
查看次数

标签 统计

boost-asio ×2

c++ ×2

asynchronous ×1

boost ×1

c++11 ×1