- •Способы доступа к общим ресурсам
- •Параметры
- •Возвращаемые значения
- •Примечания
- •Параметры
- •Возвращаемые значения
- •Примечания
- •Параметры
- •Возвращаемые значения
- •Параметры
- •Возвращаемые значения
- •Примечания
- •Параметры
- •Возвращаемые значения
- •Примечания
- •Параметры
- •Возвращаемые значения
- •Примечания
- •Параметры
- •Возвращаемые значения
- •Примечания
- •Параметры
- •Возвращаемые значения
- •Примечания
- •Параметры
- •Возвращаемые значения
Возвращаемые значения
Если функция выполнилась успешно, возвращается хендл семафора. Если именованный семафор уже существовал, функция возвращает его хендл и GetLastError возвращаетERROR_ALREADY_EXISTS. В противном случае, создается новый семафор.
Если функция выполнилась неуспешно, то возвращается NULL. Для получения более подробной информации об ошибке используйте GetLastError.
Примечания
Хендл, возвращаемый CreateSemaphore, имеет доступ SEMAPHORE_ALL_ACCESS к новому семафору и может быть использован в любой функции, которая требует хендл семафора.
Каждый поток вызвавшего процесса может задавать хендл семафора при вызове функций ожидания (например, WaitForSingleObject). Функции ожидания отдельного объекта завершаются, когда состояние заданного объекта установлено в «signaled». Для функций ожидания нескольких объектов можно указать, ожидать установления в «signaled» одного из нескольких объектов либо всех объектов. Когда функция ожидания завершается, ожидающий поток продолжает свое выполнение.
Состояние семафора «signaled», когда его счетчик больше нуля, и «nonsignaled», когда равен нулю. Параметр lInitialCount задает начальное значение счетчика. Поток-владелец использует функциюReleaseMutex для освобождения мутекса. Используйте функцию ReleaseSemaphore для увеличения счетчика семафора на заданную величину. Счетчик никогда не может быть меньше нуля и больше lMaximumCount.
Используйте функцию CloseHandle для закрытия хендла семафора. Система автоматически закрывает хендл, когда процесс завершается. Объект семафора уничтожается, когда закрывается его последний хендл.
ReleaseSemaphore
Функция ReleaseSemaphore увеличивает счетчик заданного семафора на нужную величину.
BOOL ReleaseSemaphore(
HANDLE hSemaphore, // хендл семафора
LONG lReleaseCount, // величина, на которую надо увеличить счетчик
LPLONG lpPreviousCount // адрес для предыдущего значения счетчика
);
Параметры
hSemaphore
Хендл семафора.
lReleaseCount
Задает величину, на которую должен увеличиться счетчик семафора. Значение должно быть больше нуля. Если заданная величина приводит к превышению счетчиком максимального значения, заданного при создании семафора, счетчик не изменяется и функция возвращает FALSE.
lpPreviousCount
Указатель на 32-битную переменную для получения предыдущего значения счетчика семафора. Этот параметр может быть равен NULL, если предыдущее значение не требуется.
Возвращаемые значения
Если функция выполнилась успешно, возвращается ненулевое значение.
Если функция выполнилась неуспешно, возвращается 0. Для получения более подробной информации об ошибке используйте GetLastError.
Примечания
Обычно приложения используют семафоры для ограничения количества потоков, использующих ресурс.
BeginThread
Функция BeginThread создает поток для выполнения в виртуальном адресном пространстве вызывающего процесса.
HANDLE BeginThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // указатель на атрибуты защиты
DWORD dwStackSize, // начальный размер стека потока
LPTHREAD_START_ROUTINE lpStartAddress, // указатель на функцию потока
LPVOID lpParameter, // аргумент для нового потока
DWORD dwCreationFlags, // флаги создания
LPDWORD lpThreadId // указатель для получения ID потока
);
