Biorąc pod uwagę następujący program testowy:asio 1.11.0 samodzielny wrap nie jest prawidłowy ... czy to ja?
#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();
}
moim rozumieniu jest to, że program ten nie powinien dochodzić.
wrap_test_func
jest pakowany pod io_service
ios1
. Funkcja, którą zawija, jest zawijana w strand
s2
(która używa ios2
).
Jak rozumiem, wywołanie wrap_test_func
powinno być równoważne z dispatch(ios1, test_func)
, które powinno następnie wysłać lambda w s2
).
Wygląda jednak tak, jakby wrap odwijał wewnętrzne opakowanie.
Czy to oczekiwane zachowanie?
nie jestem pewien jak to kompilowane, ponieważ nie znaleźliśmy żadnych funkcji globalnych oblewania. Używając zawijania na poziomie elementu, nie mogłem zobaczyć, jak to się dzieje, chociaż – Arunmu
@Arunmu to nie jest boost :: asio. jest to samodzielna wersja 1.11.0 –
Tak, nawet ja używam wersji samodzielnej 1.11.0 (tylko nagłówek). 'g ++ -std = C++ 11 -DASIO_STANDALONE -o wrap_test wrap_test.cc -I/Users/arunmu/asio-master/asio/include /' to sposób, w jaki go buduję. – Arunmu