C ++非阻塞ASIO运行

时间:2013-06-26 13:32:46

标签: c++ boost boost-asio libcurl nonblocking

我创建了一系列与Libcurl Multi对话的函数,并通过ASIO和Boost异步下载文件。

显然,当我调用io_service.run时,它会在运行时阻塞我的主线程。我试图让它无阻塞,但我的应用程序崩溃了。

我想知道在后台以非阻塞的方式运行它的最简单和最好的方法是什么,并在完成后调用回调函数(就像你在javascript中如何做到这一点)。

所以我可以去:

Runthisinthebackground( thingtodo, callback); 

它将运行thingtodo并将结果返回给回调。但有一点必须使用诸如boost之类的库,这些库可以在没有C ++ 11的设备上运行,作为在Android和iOS上运行的移动应用程序

1 个答案:

答案 0 :(得分:2)

在另一个帖子中运行io_service并向其发布您的功能:

asio::io_service io_service;
// give it some work, to prevent premature exit
shared_ptr<asio::io_service::work> work(new asio::io_service::work(io_service));
boost::thread t(&asio::io_service::run, &io_service);
t.detach();
//...
io_service.post(yourFunctor); // yourFunctor will be executed in the separate thread