На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Using Semaphore Objects



In the following example, a process uses a semaphore object to limit the number of windows it creates. First, it uses the CreateSemaphore function to create the semaphore and to specify initial and maximum counts.

HANDLE hSemaphore;
LONG cMax = 10;
LONG cPreviousCount;

// Create a semaphore with initial and max. counts of 10.

hSemaphore = CreateSemaphore(
NULL, // no security attributes
cMax, // initial count
cMax, // maximum count
NULL); // unnamed semaphore

if (hSemaphore == NULL)
{
// Check for error.
}


Before any thread of the process creates a new window, it uses the WaitForSingleObject function to determine whether the semaphore's current count permits the creation of additional windows. The wait function's time-out parameter is set to zero, so the function returns immediately if the semaphore is nonsignaled.

DWORD dwWaitResult;

// Try to enter the semaphore gate.

dwWaitResult = WaitForSingleObject(
hSemaphore, // handle of semaphore
0L); // zero-second time-out interval

switch (dwWaitResult) {

// The semaphore object was signaled.
case WAIT_OBJECT_0:
// OK to open another window.
break;

// Semaphore was nonsignaled, so a time-out occurred.
case WAIT_TIMEOUT:
// Cannot open another window.

break;
}


When a thread closes a window, it uses the ReleaseSemaphore function to increment the semaphore's count.

// Increment the count of the semaphore.

if (!ReleaseSemaphore(
hSemaphore, // handle of semaphore
1, // increase count by one
NULL) ) // not interested in previous count
{
// Deal with the error.
}



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Использование Объектов Семафора



В следующем примере, процесс использует объект семафора против предела номер окна это создается. Сначала, это использует функцию CreateSemaphore, чтобы создавать семафор и, чтобы определять начальные и максимальные счеты.

ПРООПЕРИРУЙТЕ hSemaphore;
ДОЛГО (ДЛИНОЙ) cMax = 10;
ДОЛГО (ДЛИНОЙ) cPreviousCount;

// Создайте семафору с инициалом и max. счетами 10.

hSemaphore = CreateSemaphore( НЕДЕЙСТВИТЕЛЬНЫЕ, // никакие атрибуты безопасности cMax, // начальный счет cMax, // максимальный счет НЕДЕЙСТВИТЕЛЬНЫЙ); // безымянный семафор

если (hSemaphore == НЕДЕЙСТВИТЕЛЬНЫЙ)
{
// Чек ошибки.
}


Прежде, чем любая резьба процесса создаст новое окно, она использует функцию WaitForSingleObject, чтобы определять разрешает текущий счет семафора создание дополнительного окна. Параметр функциональной задержки ожидания установлен в нуль, так что функция возвращается немедленно если семафор nonsignaled.

DWORD dwWaitResult;

// Попытка, чтобы вводить ворота семафора.

dwWaitResult = WaitForSingleObject( hSemaphore, // РУЧКА семафора 0L); // интервал нулевой секунды задержки

ключ (dwWaitResult) {

// Объект семафора был сигнализирован.
случай WAIT_OBJECT_0: // OK, чтобы открывать другое окно.
прерывание;

// Семафор nonsignaled, так что задержка происходила.
случай WAIT_TIMEOUT: // Не мочь открыть другое окно.

прерывание;
}


Когда резьба закрывает окно, она использует функцию ReleaseSemaphore, чтобы увеличивать счет семафора.

// Приращение счет семафора.

если (!ReleaseSemaphore( hSemaphore, // РУЧКА семафора 1, // счет увеличения одним НЕДЕЙСТВИТЕЛЬНЫМ) ) // не заинтересованный в предшествующем счете
{
// Сделка с ошибкой.
}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz