4

Libcurl Multi と通信し、ASIO と Boost を介してファイルを非同期にダウンロードする一連の関数を作成しました。

明らかに、io_service.run を呼び出すと、実行時にメイン スレッドがブロックされます。ブロックしないようにしようとしましたが、アプリがクラッシュします。

これをバックグラウンドでブロックしない方法で実行し、完了時にコールバック関数を呼び出すための最も簡単で最良の方法は何だろうと思っていました(javascriptで実行する方法のように)。

だから私はただ行くことができました:

Runthisinthebackground( thingtodo, callback); 

これは、thingtodo を実行し、結果をコールバックに返します。ただし、これには、Android および iOS で実行されるモバイル アプリ用として、C++ 11 を使用せずにデバイスで実行できるブーストなどのライブラリを使用する必要があります。

4

1 に答える 1

4

別のスレッドで実行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
于 2013-06-26T13:46:46.703 に答える