Boost Thread - Comment reconnaître une interruption

J'ai le blocage des tâches qui seront exécutées par des find_the_question() fonction. Cependant, je ne veux pas le fil de l'exécution de cette fonction prendre plus de 10 secondes. Donc, dans le cas où il prend plus de 10 secondes, je veux fermer ce thread avec le nettoyage de toutes les ressources.

J'ai essayé d'écrire un code pour que, mais de toute façon je ne suis pas en mesure d'obtenir une interruption dans find_the_question() la fonction si thread prend plus de 10 secondes. Pourriez-vous s'il vous plaît dites-moi ce que je fais 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;
}

De sortie:
Si t1 prend plus de 10 secondes pour terminer, je reçois suite à la sortie de console.

std::cout << "In main" << std::endl;
std::cout << "Worker thread not finished" << std::endl;
std::cout << "In main end" << std::endl;

alors que j'attends la suite de la sortie

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;

Pourriez-vous s'il vous plaît dites-moi ce que je fais mal.

Merci d'avance

source d'informationauteur Amey Jah