2014-09-26 4 views
4

Мне нужно переписать код, который использует функцию WaitforSingleObject Windows.Есть ли эквивалент C++ для WaitforSingleObject?

myEvent = CreateEvent(NULL, FALSE, FALSE, szName); 
WaitForSingleObject(myEvent, nMilliseconds); 

Мне нужно дождаться события или тайм-аута. Есть ли эквивалент этого в прямом C++ ??

Я использую STL C++ 11, а не любые другие библиотеки, такие как boost.

+1

http://en.cppreference.com/w/cpp/thread/condition_variable –

+1

Просьба уточнить вопрос. Зависит от того, какую библиотеку вы используете. СТЛ? увеличение? Язык C++ не имеет встроенных функций ОС, если это то, о чем вы просите. – StarShine

+0

Если вы используете потоки STL C++ 11, да –

ответ

4

Вы не можете использовать потоковые подпрограммы C++ 11 с потоками win32 (если только вы сильно не испортите реалистичные потоковые реализации, чего я бы не рекомендовал), и нет стандартного эквивалента C++ для вызова API для конкретной ОС.

Вы можете, однако использовать C++ 11 потоков и использовать condition variables (летальность. ждет), чтобы сделать то же самое, что делает WaitForSingleObject, т.е.

  • Дождитесь объекта находиться в сигнальном состоянии
  • Подождите, пока таймаут истекает

Edit: специально вам нужно будет wait_until

+2

Эквивалент вызова API будет 'wait_for', а не' wait_until'. –

+2

Может ли Visual Studio '' быть смешано с потоками winapi? –

+1

«Беспорядок с потоком нитей» - это не просто обычная вещь. VS также реализует библиотеку '' и в равной степени смешение потоков Win32 и C++ может вызвать неблагоприятные проблемы - они несовместимы автоматически. IIRC, VS использует ConcRT для реализации компонентов потоковой передачи C++. – Niall