На главную

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 Named Objects



The following examples illustrate the use of object names by creating and opening named objects.

Mutex

The first process uses the CreateMutex function to create the mutex object. Note that the function succeeds even if there is an existing object with the same name.

// One process creates the mutex object.

HANDLE hMutex;
DWORD dwErr;

hMutex = CreateMutex(
NULL, // no security descriptor
FALSE, // mutex not owned
"NameOfMutexObject"); // object name

if (hMutex == NULL)
printf("CreateMutex error: %d\n", GetLastError() );
else
if ( GetLastError() == ERROR_ALREADY_EXISTS )
printf("CreateMutex opened existing mutex\n");
else
printf("CreateMutex created new mutex\n");



The second process uses the OpenMutex function to open a handle of the existing mutex. This function fails if a mutex object with the specified name does not exist. The access parameter requests full access to the mutex object, which is necessary for the handle to be used in any of the wait functions.

// Another process opens a handle of the existing mutex.

HANDLE hMutex;

hMutex = OpenMutex(
MUTEX_ALL_ACCESS, // request full access
FALSE, // handle not inheritable
"NameOfMutexObject"); // object name

if (hMutex == NULL)
printf("OpenMutex error: %d\n", GetLastError() );


Semaphore

The following example uses the CreateSemaphore function to illustrate a named-object creation operation that fails if the object already exists.

HANDLE CreateNewSemaphore(LPSECURITY_ATTRIBUTES lpsa,
LONG cInitial, LONG cMax, LPTSTR lpszName)
{
HANDLE hSem;

// Create or open a named semaphore.

hSem = CreateSemaphore(
lpsa, // security attributes
cInitial, // initial count
cMax, // maximum count
lpszName); // semaphore name

// Close handle, and return NULL if existing semaphore opened.

if (hSem != NULL && GetLastError() == ERROR_ALREADY_EXISTS)

{
CloseHandle(hSem);
return NULL;
}

// If new semaphore was created, return the handle.

return hSem;
}



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

Использование Поименованное Возражает



Следующие примеры иллюстрируют использование объектных имен создавая и открывая поименованные объекты.

Mutex

Первый процесс использует функцию CreateMutex, чтобы создавать объект mutex. Отметьте, что функция получает даже если бы есть существующий объект с тем же именем.

// Один процесс создает объект mutex.

ПРООПЕРИРУЙТЕ hMutex;
DWORD dwErr;

hMutex = CreateMutex(
НЕДЕЙСТВИТЕЛЬНАЯ, // никакая ЛОЖЬ дескриптора безопасности, // mutex не использованная "NameOfMutexObject"); // объектное имя

если (hMutex == НЕДЕЙСТВИТЕЛЬНЫЙ)
printf(ошибка "CreateMutex: %d\n", GetLastError() );
еще
если ( GetLastError() == ERROR_ALREADY_EXISTS ) printf("CreateMutex открытый существуя mutex\n");
еще
printf("CreateMutex созданный новый mutex\n");



Второй процесс использует функцию OpenMutex, чтобы открывать ручку существующего mutex. Эта функция терпит неудачу если объект mutex с определенным именем не существует. Параметр доступа просит полный доступ к объекту mutex, который необходим для ручки, которая нужно использоваться в любой из функций ожидания.

// Другой процесс открывает ручку существующего mutex.

ПРООПЕРИРУЙТЕ hMutex;

hMutex = OpenMutex(
MUTEX_ALL_ACCESS, // ЛОЖЬ полного доступа просьбы, // ручка не inheritable "NameOfMutexObject"); // объектное имя

если (hMutex == НЕДЕЙСТВИТЕЛЬНЫЙ)
printf(ошибка "OpenMutex: %d\n", GetLastError() );


Семафор

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

РУЧКА CreateNewSemaphore(LPSECURITY_ATTRIBUTES lpsa, ДОЛГО (ДЛИНОЙ) cInitial, ДОЛГО (ДЛИНОЙ) cMax, LPTSTR lpszName)
{
ПРООПЕРИРУЙТЕ hSem;

// Создайте или открывайте поименованный семафор.

hSem = CreateSemaphore( lpsa, // Атрибуты безопасности cInitial, // начальный счет cMax, // максимальный счет lpszName); // имя семафора

// Закрытая ручка, и возврат НЕДЕЙСТВИТЕЛЬНАЯ при существующем семафоре открывались.

если (hSem != НЕДЕЙСТВИТЕЛЬНЫЙ && GetLastError() == ERROR_ALREADY_EXISTS)

{
CloseHandle(hSem);
возвращайте НЕДЕЙСТВИТЕЛЬНЫЙ;
}

// Если новый семафор был создан, возвращайте ручку.

возвращайте hSem;
}



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