Составители:
Рубрика:
DWORD WaitForMultipleObjectsEx
(DWORD dwNumObjects, // количество ожидаемых объектов
LPHANDLE lpHandles, // массив дескрипторов
BOOL bWaitAll, // TRUE – ожидание сигналов
// сразу от всех объектов;
// FALSE – ожидание сигнала от любого из объектов
DWORD dwMilliseconds, // максимальный период ожидания
BOOL bAlertable, // TRUE – прекращение ожидания
// при завершении операции ввода/вывода);...
При успешном выполнении функции ожидания объект, сигнал от кото-
рого ожидался, обычно определенным образом изменяется. Если, например,
поток ожидал и получил сигнал от исключающего семафора, функция вос-
станавливает несигнальное состояние исключающего семафора, чтобы ос-
тальные потоки знали о том, что он занят. Кроме того, функции ожидания
декрементируют значение счетчика семафора и сбрасывают информацию о
некоторых
событиях.
Функции ожидания не изменяют состояния указанного объекта до тех пор,
пока не поступит сигнал от одного или нескольких других объектов. В частно-
сти, поток не захватывает исключающий семафор сразу же после поступления
сигнала от него, а ожидает сигналов от других объектов. Кроме того, в течение
времени ожидания исключающий семафор снова может быть захвачен другим
потоком, который еще больше продлит состояние ожидания.
Конечно, ожидать поступления сигнала от объекта можно лишь в том
случае, если этот объект уже создан. Начнем с создания семафоров и исклю-
чающих семафоров, поскольку для работы с ними существуют параллельные
API-команды, позволяющие создавать и уничтожать эти объекты, захватывать
их и освобождать, а также получать их дескрипторы.
2.4.2. Семафоры и исключающие семафоры
Функциям, создающим семафоры и исключающие семафоры, нужно ука-
зать требуемые привилегии доступа и начальные параметры создаваемого объ-
екта (можно также указать его имя, но это необязательно) [2]:
HANDLE CreateMutext
(LPSECURITY_ATTRIBUTES lpsa,
// необязательные атрибуты безопасности
BOOL bInitialOwner, // TRUE – создатель хочет
// завладеть полученным объектом
LPTSTR lpszMutexName, // имя объекта);
HANDLE CreateSemaphore
30
DWORD WaitForMultipleObjectsEx
(DWORD dwNumObjects, // количество ожидаемых объектов
LPHANDLE lpHandles, // массив дескрипторов
BOOL bWaitAll, // TRUE – ожидание сигналов
// сразу от всех объектов;
// FALSE – ожидание сигнала от любого из объектов
DWORD dwMilliseconds, // максимальный период ожидания
BOOL bAlertable, // TRUE – прекращение ожидания
// при завершении операции ввода/вывода);...
При успешном выполнении функции ожидания объект, сигнал от кото-
рого ожидался, обычно определенным образом изменяется. Если, например,
поток ожидал и получил сигнал от исключающего семафора, функция вос-
станавливает несигнальное состояние исключающего семафора, чтобы ос-
тальные потоки знали о том, что он занят. Кроме того, функции ожидания
декрементируют значение счетчика семафора и сбрасывают информацию о
некоторых
событиях.
Функции ожидания не изменяют состояния указанного объекта до тех пор,
пока не поступит сигнал от одного или нескольких других объектов. В частно-
сти, поток не захватывает исключающий семафор сразу же после поступления
сигнала от него, а ожидает сигналов от других объектов. Кроме того, в течение
времени ожидания исключающий семафор снова может быть захвачен другим
потоком, который еще больше продлит состояние ожидания.
Конечно, ожидать поступления сигнала от объекта можно лишь в том
случае, если этот объект уже создан. Начнем с создания семафоров и исклю-
чающих семафоров, поскольку для работы с ними существуют параллельные
API-команды, позволяющие создавать и уничтожать эти объекты, захватывать
их и освобождать, а также получать их дескрипторы.
2.4.2. Семафоры и исключающие семафоры
Функциям, создающим семафоры и исключающие семафоры, нужно ука-
зать требуемые привилегии доступа и начальные параметры создаваемого объ-
екта (можно также указать его имя, но это необязательно) [2]:
HANDLE CreateMutext
(LPSECURITY_ATTRIBUTES lpsa,
// необязательные атрибуты безопасности
BOOL bInitialOwner, // TRUE – создатель хочет
// завладеть полученным объектом
LPTSTR lpszMutexName, // имя объекта);
HANDLE CreateSemaphore
30
Страницы
- « первая
- ‹ предыдущая
- …
- 28
- 29
- 30
- 31
- 32
- …
- следующая ›
- последняя »
