2013-06-26 2 views
2

Я создал ряд функций, которые говорят с Libcurl Multi и загружают файлы асинхронно через ASIO и Boost.C++ Non-Blocking ASIO Run

Очевидно, что, когда я вызываю io_service.run, он блокирует мой основной поток при его запуске. Я попытался сделать это не блокирующим, но мое приложение выйдет из строя.

Мне было интересно, что является самым простым и лучшим подходом к выполнению этого в фоновом режиме, в неблокирующем режиме и вызвать вызов функции обратного вызова, когда это будет сделано (например, как вы можете это сделать в javascript) ,

Так что я мог бы просто пойти:

Runthisinthebackground(thingtodo, callback); 

Было бы запустить thingtodo и возвращает результат обратного вызова. Одна вещь, хотя это должно использовать библиотеки, такие как импульс, который может работать на устройствах с из C++ 11, как сво для мобильных приложений, работающих на Android и прошивкой

+0

FWIW, iOS и Android toolchains поддержка C++ 11. –

+0

О, я не знал этого :) Спасибо за головы :), что делает вещи намного проще :) –

ответ

1

Run 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 
+0

Cheers :) он работает только с ошибкой памяти, я думаю, мне нужно использовать этот общий указатель, чтобы поделиться моей информацией –