Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 28 января!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.
Использование семафора при помощи API-функций

Семафор представляет собой глобальный объект, позволяющий синхронизировать работу двух или нескольких процессов или потоков. Для программиста семафор - это просто счетчик. Если счетчик равен N, это означает, что к ресурсу имеют доступ N процессов. Рассмотрим функции для работы с семафорами.

CreateSemaphor - создаёт глобальный объект-семафор. Возвращает дескриптор семафора.

HANDLE CreateSemaphore
 
 (
 
  LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
 
  LONG lInitialCount,
 
  LONG lMaximumCount,
 
  LPCTSTR lpName
 
 )

Первый параметр - указатель на структуру, определяющую атрибуты доступа. Может иметь значение для Windows NT. Обычно данный параметр равен NULL.
Второй параметр - начальное значение счётчика семафора. Определяет, сколько задач имеют доступ к ресурсу в начале.
Третий параметр - количество задач, которые имеют одновременный доступ к ресурсу.
Четвёртый параметр - указатель на строку, содержащую имя семафора.

OpenSemaphor - открыть уже созданный семафор. Возвращает дескриптор семафора. Данную функцию используют не так часто. Обычно создают семафор и присваивают его дескриптор глобальной переменной, а потом используют этот дескриптор в порождаемых потоках.

HANDLE OpenSemaphore
 
 (
 
  DWORD dwDesiredAccess,
 
  BOOL bInheritHandle,
 
  LPCTSTR lpName
 
 )

Параметры функции: первый параметр - определяет желаемый уровень доступа к семафору. Возможны значения: SEMAPHORE_MODiFY_STATE = 2H, разрешить использование функции ReleaseSemaphore, SYNCHRONIZE = 100000H, разрешить использование любой функции ожидания, только для Windows NT, SEMAPHORE_ALLACCESS = 0F0000h+ SYNCHRONIZE+3H, специфицирует все возможные флаги доступа к семафору.

WaitForSingleObject – ожидать открытие семафора. При успешном завершении, т. е. открытии доступа к объекту, функция возвращает 0. Значение 102h будет означать, что заданный период ожидания.

DWORD WaitForSingleObject
 
 (
 
  HANDLE hHandle,
 
  DWORD dwMilliseconds
 
 )

Первый параметр – дескриптор семафора.
Второй параметр – время ожидания в миллисекундах. Если параметр равен INFINITE = 0FFFFFFFFh, то время ожидания не ограничено.

ReleaseSemaphore – освободить семафор и позволить получить доступ к ресурсу другим процессам.

BOOL ReleaseSemaphore
 
 (
 
  HANDLE hSemaphore,
 
  LONG lReleaseCount,
 
  LPLONG lpPreviousCount
 
 )

Первый параметр – дескриптор семафора.
Второй параметр – определяет какое значение должно быть добавлено к счетчику семафора. Чаще всего этот параметр равен единице.
Третий параметр – указатель на переменную, куда должно быть перемещено предыдущее значение счетчика.

Рассмотрим алгоритм работы с семафором. Сначала при помощи функции CreateSemaphore создадим семафор, и его дескриптор присваивается глобальной переменной. Пред попыткой обращения к ресурсам доступ, к которым необходимо ограничить, поток должен вызвать функцию WaitForSingleObject. При открытии доступа функция возвращает 0. По окончании работы с ресурсом следует вызвать функцию ReleaseSemaphor. Тем самым увеличивается счётчик доступа на 1. С помощью семафора можно регулировать количество потоков, которые одновременно могут иметь доступ к ресурсу. Максимальное значение счетчика как раз и определяет, сколько потоков могут получить доступ к ресурсу одновременно. Но обычно, как мы уже говорили, максимальное значение полагают равным 1.



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS