2015-10-16 2 views
0

У меня есть одна задача, которая может быть гибкой, если она работает.Странное поведение в std :: async

Так я tryng это:

#include <iostream> 
#include <future> 

using namespace std; 

int main() 
{ 
    auto handle = std::async(std::launch::deferred,[] 
         { 
          cout<<"Initializing thread..."<<endl; 
          this_thread::sleep_for(std::chrono::seconds(5)); 
         } 
       ); 

    cout<<"Starting..."<<endl; 
    handle.wait_for(std::chrono::seconds(2)); 

    cout<<"Finished correctly"<<endl; 
    return 0; 
} 

вывод:

... Начало

Закончены правильно

Почему не печатают «Инициализация нити ... "? Я попытался обменять оба chronos и не работает в любом случае

ответ

1

Вы никогда не требуете результата задания, поэтому он не запланирован.

Замените deferred на async, и вы получите то, что ожидаете.

+0

Дело в том, что если я создаю поток, я не смогу его убить – amchacon

+0

Важно то, что вы не можете создать поток с 'std :: async'. Вы не контролируете это. – sehe

+0

Хорошо, я проверил это: http://en.cppreference.com/w/cpp/thread/future_status – amchacon

1

deferred оценивает только на не -timed wait функция. Если вы измените на:

handle.wait(); 

В этот момент вы увидите начало потока.

+0

Это не то, что OP хочет сделать. В противном случае вы можете просто позвонить .get() – sehe

Смежные вопросы