É seguro usar a desova diretamente em uma corotina asio stackful?
Quando eu uso o spawn para iniciar uma nova corotina cheia de pilha em uma corotina, o valgrind diz muito sobre o uso de valor não inicializado (saída valgrind)
Então eu uso io_service.post para chamar um manipulador e iniciar uma nova rotina de pilha cheia, tudo parece bem.
Pesquisei e li alguns documentos, mas não consigo encontrar algo sobre como criar uma nova corotina de pilha cheia com segurança em uma corotina de pilha cheia.
Aqui está o código:
#include <iostream>
#include <boost/asio.hpp>
#include <boost/asio/spawn.hpp>
#include <boost/asio/system_timer.hpp>
#include <chrono>
using namespace std;
int main()
{
auto use_post = false;
boost::asio::io_service io_service;
boost::asio::spawn(io_service,
[&io_service, &use_post](boost::asio::yield_context yield){
if(use_post){
io_service.post([&io_service]{
boost::asio::spawn(io_service, [&io_service](boost::asio::yield_context yield){
boost::asio::system_timer timer(io_service);
timer.expires_from_now(std::chrono::seconds(1));
timer.async_wait(yield);
cout << "Sleep 1 second" << endl;
});
});
}
else{
boost::asio::spawn(io_service, [&io_service](boost::asio::yield_context yield){
boost::asio::system_timer timer(io_service);
timer.expires_from_now(std::chrono::seconds(1));
timer.async_wait(yield);
cout << "Sleep 1 second" << endl;
});
}
boost::asio::system_timer timer(io_service);
timer.expires_from_now(std::chrono::seconds(2));
timer.async_wait(yield);
cout << "Sleep 2 seconds" << endl;
});
io_service.run();
return 0;
}
definido como verdadeirouse_post
variável, a nova rotina de pilha cheia será iniciada por post + spawn.
Talvez eu não leia os documentos com cuidado, não consigo encontrar nada útilBoost.Asio C++ Network Programming
, N4045
e impulsionar o documento asio.