给出以下测试程序:
#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();
}
我的理解是该程序不应该声明。
wrap_test_func
包装在io_service
ios1
中。它包装的功能包装在strand
s2
(使用ios2
)中。据我了解,调用
wrap_test_func
应该等效于dispatch(ios1, test_func)
,然后应在s2
中分派(dispatch)lambda)。但是,看起来好像wrap已经打开了内部包装。
这是预期的行为吗?
最佳答案
原来那是我的误会。
这是Asio作者的回复拷贝: