Я пытаюсь использовать 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
Я что-то не так делаю или это ошибка компилятора?