#include <iostream>
#include <thread>
#include <boost/asio.hpp>
using boost::asio::io_service;
class foo
{
public:
foo(io_service& service)
: service_(service) {}
void bar()
{
service_.post(
[this]
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
sleep(1);
});
}
private:
io_service& service_;
};
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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgoKI2luY2x1ZGUgPGJvb3N0L2FzaW8uaHBwPgoKdXNpbmcgYm9vc3Q6OmFzaW86OmlvX3NlcnZpY2U7CgpjbGFzcyBmb28KewpwdWJsaWM6CiAgICBmb28oaW9fc2VydmljZSYgc2VydmljZSkKICAgICAgOiBzZXJ2aWNlXyhzZXJ2aWNlKSB7fQoKICAgIHZvaWQgYmFyKCkKICAgIHsKICAgICAgICBzZXJ2aWNlXy5wb3N0KAogICAgICAgICAgICBbdGhpc10KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8IF9fUFJFVFRZX0ZVTkNUSU9OX18gPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgICAgc2xlZXAoMSk7CiAgICAgICAgICAgIH0pOwogICAgfQpwcml2YXRlOgogICAgaW9fc2VydmljZSYgc2VydmljZV87Cn07CgppbnQgbWFpbigpCnsKICAgIGlvX3NlcnZpY2Ugc2VydmljZTsKICAgIGlvX3NlcnZpY2U6OndvcmsqIHdvcmsgPSBuZXcgaW9fc2VydmljZTo6d29yayhzZXJ2aWNlKTsKICAgIHN0ZDo6dGhyZWFkIHQoWyZzZXJ2aWNlXSB7IHNlcnZpY2UucnVuKCk7IH0pOwoKICAgIGZvbyBmKHNlcnZpY2UpOwogICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDsgKytpKQogICAgICAgIGYuYmFyKCk7CiAgICBzbGVlcCg1KTsKICAgIHN0ZDo6Y291dCA8PCAiQ2xvc2luZyIgPDwgc3RkOjplbmRsOwoKICAgIC8vZGVsZXRlIHdvcms7CiAgICAvL3dvcmsgPSBudWxscHRyOwoKICAgIHNlcnZpY2Uuc3RvcCgpOwogICAgdC5qb2luKCk7CiAgICByZXR1cm4gMDsKfQo=