Boost Thread - как подтвердить прерывание

У меня есть блокировка задачи, которая будет выполнена функцией find_the_question (). Однако я не хочу, чтобы нить выполнял эту функцию, займет более 10 секунд. Так что в случае, если требуется более 10 секунд, я хочу закрыть эту нить с очисткой всех ресурсов.

Я пытался написать код для этого, но каким-то образом я не могу получить прерывание в функции find_the_question (), если нить занимает более 10 секунд. Не могли бы вы сказать мне, что я делаю не так?

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;
}

Вывод: Если T1 требуется более 10 секунд для завершения, я получаю последующую вывод консоли.

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

В то время как я ожидаю, что следующий вывод

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;

не могли бы вы сказать мне, что я делаю не так.

Заранее спасибо

17
задан Amey Jah 6 September 2011 в 07:55
поделиться