He bloqueo tarea que se lleva a cabo por la función find_the_question(). Sin embargo, no quiero que el hilo que ejecuta esta función lleve más de 10 segundos. Entonces, en caso de que tome más de 10 segundos, quiero cerrar ese hilo con la limpieza de todos los recursos.Boost Tema - ¿Cómo reconocer interrumpo
traté de escribir un código para eso, pero por alguna razón no soy capaz de conseguir una interrupción en find_the_question función() si el hilo tarda más de 10 segundos. ¿Podría decirme por favor qué estoy haciendo mal?
void find_the_question(std::string value)
{
//allocate x resources
try{
//do some process on resources
sleep(14);
//clean resources
}
catch(boost::thread_interrupted const&)
{
//clean resources
std::cout << "Worker thread interrupted" << std::endl;
}
}
int main()
{
boost::posix_time::time_duration timeout = boost::posix_time::milliseconds(10000);
std::cout << "In main" << std::endl;
boost::thread t1(find_the_question, "Can you block me");
t1.interrupt();
if (t1.timed_join(timeout))
{
//finished
std::cout << "Worker thread finished" << std::endl;
}
else
{
//Not finished;
std::cout << "Worker thread not finished" << std::endl;
}
std::cout << "In main end" << std::endl;
}
Salida: Si t1 tarda más de 10 segundos para completar, estoy consiguiendo siguiente salida de la consola.
std::cout << "In main" << std::endl;
std::cout << "Worker thread not finished" << std::endl;
std::cout << "In main end" << std::endl;
mientras que, estoy esperando siguiente salida
std::cout << "In main" << std::endl;
std::cout << "Worker thread interrupted" << std::endl;
std::cout << "Worker thread not finished" << std::endl;
std::cout << "In main end" << std::endl;
¿Me podría decir qué estoy haciendo mal.
Gracias de antemano
El 'sueño (14);' que está utilizando. ¿Esto es un sueño de 'boost :: thread' o es la función c sleep? Porque la interrupción solo funciona en 'boost :: thread: sleep' – mkaes