Find_the_question() işlevi tarafından gerçekleştirilecek engelleme görevim var. Ancak, bu işlevi yürüten iş parçacığının 10 saniyeden uzun sürmesini istemiyorum. Yani 10 saniyeden fazla sürmesi durumunda, tüm kaynakları temizleyerek bu iş parçacığı kapatmak istiyorum.Boost İş Parçacığı - Interrupt nasıl bildirilir
Bunun için bir kod yazmayı denedim, ancak iş parçacığı 10 saniyeden uzun sürerse, find_the_question() işlevinde bir kesme yapamayacağım. Lütfen bana neyi yanlış yaptığımı söyler misiniz?
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;
}
Çıktı: t1 tamamlamak için 10 saniyeden fazla sürer , ben konsol çıkışı aşağıdaki alıyorum.
std::cout << "In main" << std::endl;
std::cout << "Worker thread not finished" << std::endl;
std::cout << "In main end" << std::endl;
oysa, sana yanlış yapıyorum söyleyebilir misiniz çıkışı
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;
aşağıdaki bekliyorum. boost :: iplik :: kesme() kullanmak için önceden
Kullandığınız uyku (14); ''. Bu, boost :: thread' den bir uyku mı yoksa c uyku fonksiyonu mu? Çünkü kesme sadece “boost :: thread: sleep' üzerinde çalışır. – mkaes