Операционные системы. Программирование в операционной среде Windows

35 Для синхронизации можно использовать любые ОЯ, но есть специализированные ОЯ: семафоры, события, мьютексы, ожидаемые таймеры. 3.5.1. Wait-функции Поток получает доступ к ресурсу, вызывая одну из ЖагУ-функций и передавая ей описатель ОЯ, регулирующего доступ к ресурсу. Если Wait- функция определяет, что ресурс занят, система переводит вызывающий поток в состояние ожидания. Чаще всего используется функция WaitForSingleObjectQ'. DWORD WaitForSingleObject(HANDLE hObject, DWORD dwMilliseconds); Первый параметр hObject - описатель ОЯ, второй параметр dwMilliseconds - время ожидания освобождения объекта (в миллисекундах). Следующий вызов сообщает системе, что поток будет ждать до тех пор, пока не завершится процесс, идентифицируемый описателем hProcess: WaitForSingleObject(hProcess, INFINITE); Константа INFINITE указывает системе, что вызывающий поток готов ждать этого события хоть целую вечность. В этом параметре можно указать любое значение в миллисекундах: DWORD dw = WaitForSingleObject(hProcess, 5000); // ожидаем завершения процесса 5000 мс switch (dw) { case WAIT_OBJECT_0: // объект освободился, т.е. процесс завершился break; case WAIT_TIMEOUT: // время истекло, объект не освободился, // т.е. процесс не завершился в течение 5 000 мс break; case WAIT_FAILED: // неправильный вызов функции, например неверный описатель break; } Функция WaitForMultipleObJects аналогична WaitForSingleObject, но позволяет ждать освобождения сразу нескольких объектов или какого-то одного из списка объектов: DWORD WaitForMultipleObjects(DWORD dwCount, CONST HANDLE *phObjects, BOOL fWaitAll, DWORD dwMilliseconds); Параметр dwCount определяет количество ожидаемых ОЯ. Параметр phObject — это указатель на массив описателей ОЯ. WaitForMultipleObjects приостанавливает поток и заставляет его ждать освобождения либо всех заданных объектов ядра, либо одного из них. Если значение параметра fWaitAll равно TRUE, функция не даст потоку возобновить свою работу, пока не освободятся все объекты.

RkJQdWJsaXNoZXIy MTY0OTYy