#include <iostream>
#include <thread>
#include <boost/asio.hpp>
using boost::asio::io_service;
class foo
{
public:
foo(io_service& service)
: strand_(service) {}
void bar()
{
strand_.post(
[this]
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
sleep(1);
});
}
private:
io_service::strand strand_;
};
int main()
{
io_service service;
io_service::work* work = new io_service::work(service);
std::thread t([&service] { service.run(); });
foo f(service);
for (size_t i = 0; i < 10; ++i)
f.bar();
sleep(5);
std::cout << "Closing" << std::endl;
//delete work;
//work = nullptr;
service.stop();
t.join();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgoKI2luY2x1ZGUgPGJvb3N0L2FzaW8uaHBwPgoKdXNpbmcgYm9vc3Q6OmFzaW86OmlvX3NlcnZpY2U7CgpjbGFzcyBmb28KewpwdWJsaWM6CiAgICBmb28oaW9fc2VydmljZSYgc2VydmljZSkKICAgICAgOiBzdHJhbmRfKHNlcnZpY2UpIHt9CgogICAgdm9pZCBiYXIoKQogICAgewogICAgICAgIHN0cmFuZF8ucG9zdCgKICAgICAgICAgICAgW3RoaXNdCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBfX1BSRVRUWV9GVU5DVElPTl9fIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgIHNsZWVwKDEpOwogICAgICAgICAgICB9KTsKICAgIH0KcHJpdmF0ZToKICAgIGlvX3NlcnZpY2U6OnN0cmFuZCBzdHJhbmRfOwp9OwoKaW50IG1haW4oKQp7CiAgICBpb19zZXJ2aWNlIHNlcnZpY2U7CiAgICBpb19zZXJ2aWNlOjp3b3JrKiB3b3JrID0gbmV3IGlvX3NlcnZpY2U6Ondvcmsoc2VydmljZSk7CiAgICBzdGQ6OnRocmVhZCB0KFsmc2VydmljZV0geyBzZXJ2aWNlLnJ1bigpOyB9KTsKCiAgICBmb28gZihzZXJ2aWNlKTsKICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTA7ICsraSkKICAgICAgICBmLmJhcigpOwogICAgc2xlZXAoNSk7CiAgICBzdGQ6OmNvdXQgPDwgIkNsb3NpbmciIDw8IHN0ZDo6ZW5kbDsKCiAgICAvL2RlbGV0ZSB3b3JrOwogICAgLy93b3JrID0gbnVsbHB0cjsKCiAgICBzZXJ2aWNlLnN0b3AoKTsKICAgIHQuam9pbigpOwogICAgcmV0dXJuIDA7Cn0K