Tôi có nhiệm vụ chặn sẽ được thực hiện bởi hàm find_the_question(). Tuy nhiên, tôi không muốn thread thực hiện chức năng này mất hơn 10 giây. Vì vậy, trong trường hợp mất hơn 10 giây, tôi muốn đóng chủ đề đó bằng cách làm sạch tất cả các tài nguyên.Chủ đề tăng tốc - Cách xác nhận ngắt
Tôi đã cố gắng viết mã cho điều đó, nhưng bằng cách nào đó tôi không thể nhận được ngắt trong hàm find_the_question() nếu chuỗi mất hơn 10 giây. Bạn có thể vui lòng cho tôi biết tôi đang làm gì sai?
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;
}
Đầu ra: Nếu t1 mất hơn 10 giây để hoàn thành, tôi nhận được kết quả đầu ra sau đây.
std::cout << "In main" << std::endl;
std::cout << "Worker thread not finished" << std::endl;
std::cout << "In main end" << std::endl;
trong khi, tôi đang mong đợi sau đầu ra
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;
Ông có thể xin vui lòng cho tôi biết những gì tôi làm sai.
Cảm ơn trước
'Ngủ (14);' mà bạn đang sử dụng. Đây có phải là giấc ngủ từ 'boost :: thread' hay là chức năng ngủ c? Bởi vì ngắt chỉ hoạt động trên 'boost :: thread: sleep' – mkaes