を考えると、次のテストプログラム: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();
}
私の理解では、このプログラムが主張してはならないということです。
wrap_test_func
は、io_service
ios1
にラップされています。ラッピングする関数はstrand
s2
(ios2
を使用)にラップされています。
私が理解しているように、wrap_test_func
はdispatch(ios1, test_func)
と同じで、s2
にラムダを送信する必要があります。
しかし、ラップが内側のラッパーをラップしていないかのように見えます。
これが期待どおりの動作ですか?
私は任意のグローバルラップ機能が見つからないように私は、あなたがこれをコンパイルしたかどうかはわかりませんよ。メンバーレベルのラップを使って、私はアサートが起こっているのを見ることができませんでしたが、 – Arunmu
@Arunmuこれはboost :: asioではありません。それはスタンドアロンのバージョン1.11です。0 –
ええ、私はスタンドアロンバージョン1.11.0(ヘッダーのみ)を使用しています。 'g ++ -std = C++ 11 -DASIO_STANDALONE -wrap_test wrap_test.cc -I/Users/arunmu/asio-master/asio/include /'はどのようにビルドしていますか? – Arunmu