Странное условие condition_variable :: wait_for - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь использовать wait_for функцию std::condition_variable, скомпилированную с Visual C ++ 2017, однако она возвращает случайные неожиданные результаты с помощью следующего простого кода (который никогда не сигнализирует о переменной, поэтому он всегда должен возвращать время ожидания):

condition_variable m_cv;
mutex m_mutex;

void ThreadProc()
{
   while (1)
   {
      unique_lock<mutex> lk(m_mutex);
      cv_status r = m_cv.wait_for(lk, chrono::milliseconds(200));

      printf("Result %s\n", r == cv_status::timeout ? "timeout" : "no timeout");

      Sleep(100);
   }
}

int _tmain(int argc, _TCHAR* argv[])
{
   thread th(ThreadProc);
   th.join();

   return 0;
}

Результаты случайные, как:

Result no timeout
Result timeout
Result no timeout
Result timeout
Result timeout
Result timeout
Result timeout
Result no timeout

Я что-то не так делаю или это ошибка компилятора?

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