std :: async не работает в C ++ 11, платформа Linux - PullRequest
0 голосов
/ 22 ноября 2018
bool tf()
{
    sleep(5000);
    return true;
}

int main()
{
    std::future<bool> bb = std::async(std::launch::async, tf);
    bool b = false;
    while(1)
    {   
        if(b == true) break;

        b = bb.get();
    }   

    return 0;
}

почему не работает?Я намеревался завершить программу через 5 секунд.Однако программа зависает.

1 Ответ

0 голосов
/ 22 ноября 2018

Существует гораздо лучшая альтернатива прямому использованию вызова глобальной sleep.Используйте заголовок <chrono> и строковые литералы, которые он предоставляет вместе с std::this_thread::sleep_for.Это менее подвержено ошибкам, например,

#include <chrono>

// Bring the literals into the scope:
using namespace std::chrono_literals;

bool tf()
{
   std::this_thread::sleep_for(5s);
   //                          ^^ Awesome! How readable is this?!

   return true;
}

Вместе с оставшимся фрагментом, который вы разместили, это должно работать как задумано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...