ho bloccando compito che sarà assicurato dalla funzione find_the_question(). Tuttavia, non voglio che thread che esegue questa funzione impieghi più di 10 secondi. Quindi nel caso occorrano più di 10 secondi, voglio chiudere quel thread con la pulizia di tutte le risorse.Boost Discussione - Come riconoscere interrompere
ho cercato di scrivere un codice per questo, ma in qualche modo non sono in grado di ottenere un interrupt find_the_question funzione() se filo impiega più di 10 secondi. Potresti dirmi cosa sto sbagliando?
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;
}
uscita: Se t1 richiede più di 10 secondi per completare, io sono sempre a seguito dell'uscita della console.
std::cout << "In main" << std::endl;
std::cout << "Worker thread not finished" << std::endl;
std::cout << "In main end" << std::endl;
mentre, mi aspetto seguente output
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;
La prego di dirmi che cosa sto facendo di sbagliato.
Grazie in anticipo
"sleep (14);" che stai utilizzando. È un sonno da 'boost :: thread' o è la funzione c sleep? Perché l'interrupt funziona solo su 'boost :: thread: sleep' – mkaes