Операционные системы. Программирование в операционной среде Windows
36 Параметр dwMilliseconds идентичен одноименному параметру функции WaitF orS ingleObject. Пример вызова функции WaitForMultipleObjects: HANDLE h[3] ; h[0] = hProcessl; h[l] = hProcess2; h[2] = hProcess3, DWORD dw = WaitForMultipleObjects (3, h, FALSE, 5000); switch (dw) { case WAIT_FAILED: // неправильный вызов функции (например, неверный описатель) break; case WAIT_TIMEOUT: // ни один из объектов не освободился в течение 5000 мс break; case WAIT_OBJECT_0 + 0: // завершился процесс, идентифицируемый h[0], // т.е. описателем hProcessl break; case WATT_OBJECT_0 + 1: // завершился процесс, идентифицируемый h[l], // т.е. описателем hProcess2 break; case WAIT_OBJECT_0 + 2: // завершился процесс, идентифицируемый h[2], // т.е. описателем hProcess3 break; } 3.5.2. События ОЯ «событие» - самый простой ОЯ. События уведомляют об окончании какой-либо операции. Они содержат счетчик числа пользователей и две булевы переменные: одна сообщает тип данного объекта-события, другая — его состояние: свободен или занят. Объекты-события бывают двух типов: со сбросом вручную (manual- reset events) и с автосбросом (auto-reset events). Первые позволяют возобновлять выполнение сразу нескольких ждущих потоков, вторые — только одного. Объекты-события обычно используют в том случае, когда какой-то поток выполняет инициализацию, переводит ОЯ «событие» в занятое состояние и приступает к своим операциям. Закончив операции, он сбрасывает событие в свободное состояние. Тогда другой поток, который ждал перехода события в свободное состояние, пробуждается и становится планируемым. ОЯ «событие» создается функцией CreateEvent: HANDLE CreateEvent(PSECURITY_ATTRIBUTES psa, BOOL fManualReset, BOOL fInitialstate, PCTSTR pszName);
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy