网站首页  词典首页

请输入您要查询的函数:

 

术语 createsemaphore
释义 CreateSemaphore
语法:
C++
HANDLE WINAPI CreateSemaphore(
__in_opt LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
__in LONG lInitialCount,
__in LONG lMaximumCount,
__in_opt LPCTSTR lpName
);
CreateSemaphore函数
创建或打开一个有名或无名的信号量对象。
要指定一个对象的访问掩码,使用CreateSemaphoreEx功能。
参数
lpSemaphoreAttributes [中,可选]
一个SECURITY_ATTRIBUTES结构的指针。如果该参数为NULL,处理不能由子进程继承。
结构的lpSecurityDescriptor成员指定一个新的信号安全描述符。如果该参数为NULL,则信号得到默认的安全描述。在对来自一个信号默认安全描述符的ACL或模拟的主要创造者的象征。
lInitialCount [in]
对于信号量对象的初始值。此值必须大于或等于零,小于或等于lMaximumCount。一个信号状态时,其信号计数大于零,无信号时,它是零。伯爵是下降了1个每当等待功能释放一个线程,这对于等待信号量。伯爵是增加了规定数额通过调用ReleaseSemaphore函数。
lMaximumCount [in]
对于信号量对象的最大数量。此值必须大于零。
lpName [中,可选]
信号量对象的名称。该名称被限制为MAX_PATH字符。名称比较是区分大小写的。
如果lpName匹配现有的信号量对象的名字命名,该功能要求SEMAPHORE_ALL_ACCESS访问权限。在这种情况下,lInitialCount和lMaximumCount参数将被忽略,因为他们已经被创建进程设置。如果lpSemaphoreAttributes参数不是NULL,它确定是否可以被继承处理,但它的安全描述符的成员被忽略。
如果lpName为NULL,则信号量对象创建没有名称。
如果lpName匹配现有的事件,互斥体,可等待定时器,工作,或文件映射对象,该函数失败,而且GetLastError函数返回出现ERROR_INVALID_HANDLE名。这是因为这些对象共享相同的名称空间。
这个名称可以有一个“全球\\”或“Local \\”前缀明确创建对象的全球或会话名称空间。名称的其余部分可以包含以外的任何字符反斜杠字符(\\)。如需信息见命名内核对象。快速用户切换是使用终端服务会话。内核对象名称必须遵循概述了终端服务,使应用程序能够支持多个用户的指导方针。
窗口2000:如果终端服务没有运行,“全球\\”和“地方\\”前缀将被忽略。名称的其余部分可以包含反斜杠以外的任何字符的字符。
该对象可以创建一个私人空间。有关更多信息,请参见对象命名。
返回值
如果函数成功,返回值是一个句柄的信号量对象。如果命名信号量对象在函数调用之前存在,函数返回的句柄现有的对象和GetLastError返回ERROR_ALREADY_EXISTS。
如果函数失败,返回值为NULL。为了获得更多错误信息,调用GetLastError。
备注
在处理CreateSemaphore产生具有SEMAPHORE_ALL_ACCESS访问权限,它可以在任何函数,需要一个句柄信号量对象,提供来电者已被授予使用。如果信号是从服务或线程模拟不同的用户创建的,您可以申请一个安全描述符的信号当您创建,或者通过改变其默认的DACL为创建进程的默认安全描述符。有关更多信息,请参阅同步对象的安全和访问权限。
任何线程调用进程的信号可以指定对象在调用句柄在等待职能之一。单对象等待函数返回时,指定对象的状态信号。在多对象等待函数可以奉命返回或者当任何一个或指定对象的所有信号。当一个等待函数返回时,等待线程被释放继续执行。
一个信号量对象的状态时,其信号计数大于零,无信号时,其计数等于零。在lInitialCount参数指定的初始值。每一个等待线程被释放,因为信号的信号状态,信号量的计算时间减少了1。使用ReleaseSemaphore函数增量指定数额的信号的计数。伯爵不能小于零或大于在lMaximumCount参数指定的值更大。
多个进程可以有相同的信号量对象句柄,使使用的进程间同步对象。下列对象共享机制可用:
子进程的CreateProcess函数创建可以继承的句柄量对象如果CreateSemaphore lpSemaphoreAttributes参数启用继承。
一个进程可以指定信号量对象在调用句柄DuplicateHandle函数来创建一个重复的句柄可以被另一个进程使用。
一个进程可以调用指定的信号量对象的名称的OpenSemaphore或CreateSemaphore功能。
使用CloseHandle函数关闭处理。该系统关闭时自动处理过程终止。信号量对象被销毁时,其最后处理已关闭。
实例
举一个例子,它使用CreateSemaphore,请参阅使用信号量对象。
要求:
最低支持:client-Windows 2000专业版
最低支持server-Windows 2000服务器
HeaderWinbase.h(头文件:winuser.h)
LibraryKernel32.lib
DLLKernel32.dll
Unicode和ANSI namesCreateSemaphoreW(Unicode)和CreateSemaphoreA(ANSI)的
参见
CloseHandle
CreateProcess的
CreateSemaphoreEx
DuplicateHandle
对象名称
OpenSemaphore
ReleaseSemaphore
SECURITY_ATTRIBUTES
信号量对象
同步功能
如果有任何问题和意见,请发送给微软(wsddocfb@microsoft.com)
生成日期:2009年8月27日
==英文原文==CreateSemaphore Function
Creates or opens a named or unnamed semaphore object.
To specify an access mask for the object, use the CreateSemaphoreEx function.
Syntax
C++
HANDLE WINAPI CreateSemaphore(
__in_opt LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
__in LONG lInitialCount,
__in LONG lMaximumCount,
__in_opt LPCTSTR lpName
);
Parameters
lpSemaphoreAttributes [in, optional]
A pointer to a SECURITY_ATTRIBUTES structure. If this parameter is NULL, the handle cannot be inherited by child processes.
The lpSecurityDescriptor member of the structure specifies a security descriptor for the new semaphore. If this parameter is NULL, the semaphore gets a default security descriptor. The ACLs in the default security descriptor for a semaphore come from the primary or impersonation token of the creator.
lInitialCount [in]
The initial count for the semaphore object. This value must be greater than or equal to zero and less than or equal to lMaximumCount. The state of a semaphore is signaled when its count is greater than zero and nonsignaled when it is zero. The count is decreased by one whenever a wait function releases a thread that was waiting for the semaphore. The count is increased by a specified amount by calling the ReleaseSemaphore function.
lMaximumCount [in]
The maximum count for the semaphore object. This value must be greater than zero.
lpName [in, optional]
The name of the semaphore object. The name is limited to MAX_PATH characters. Name comparison is case sensitive.
If lpName matches the name of an existing named semaphore object, this function requests the SEMAPHORE_ALL_ACCESS access right. In this case, the lInitialCount and lMaximumCount parameters are ignored because they have already been set by the creating process. If the lpSemaphoreAttributes parameter is not NULL, it determines whether the handle can be inherited, but its security-descriptor member is ignored.
If lpName is NULL, the semaphore object is created without a name.
If lpName matches the name of an existing event, mutex, waitable timer, job, or file-mapping object, the function fails and the GetLastError function returns ERROR_INVALID_HANDLE. This occurs because these objects share the same name space.
The name can have a "Global\\" or "Local\\" prefix to explicitly create the object in the global or session name space. The remainder of the name can contain any character except the backslash character (\\). For more information, see Kernel Object Namespaces . Fast user switching is implemented using Terminal Services sessions. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users.
Windows 2000: If Terminal Services is not running, the "Global\\" and "Local\\" prefixes are ignored. The remainder of the name can contain any character except the backslash character.
The object can be created in a private namespace. For more information, see Object Namespaces .
Return Value
If the function succeeds, the return value is a handle to the semaphore object. If the named semaphore object existed before the function call, the function returns a handle to the existing object and GetLastError returns ERROR_ALREADY_EXISTS.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
Remarks
The handle returned by CreateSemaphore has the SEMAPHORE_ALL_ACCESS access right; it can be used in any function that requires a handle to a semaphore object, provided that the caller has been granted access. If an semaphore is created from a service or a thread that is impersonating a different user, you can either apply a security descriptor to the semaphore when you create it, or change the default security descriptor for the creating process by changing its default DACL. For more information, see Synchronization Object Security and Access Rights .
Any thread of the calling process can specify the semaphore-object handle in a call to one of the wait functions . The single-object wait functions return when the state of the specified object is signaled. The multiple-object wait functions can be instructed to return either when any one or when all of the specified objects are signaled. When a wait function returns, the waiting thread is released to continue its execution.
The state of a semaphore object is signaled when its count is greater than zero, and nonsignaled when its count is equal to zero. The lInitialCount parameter specifies the initial count. Each time a waiting thread is released because of the semaphore's signaled state, the count of the semaphore is decreased by one. Use the ReleaseSemaphore function to increment a semaphore's count by a specified amount. The count can never be less than zero or greater than the value specified in the lMaximumCount parameter.
Multiple processes can have handles of the same semaphore object, enabling use of the object for interprocess synchronization. The following object-sharing mechanisms are available:
A child process created by the CreateProcess function can inherit a handle to a semaphore object if the lpSemaphoreAttributes parameter of CreateSemaphore enabled inheritance.
A process can specify the semaphore-object handle in a call to the DuplicateHandle function to create a duplicate handle that can be used by another process.
A process can specify the name of a semaphore object in a call to the OpenSemaphore or CreateSemaphore function.
Use the CloseHandle function to close the handle. The system closes the handle automatically when the process terminates. The semaphore object is destroyed when its last handle has been closed.
Examples
For an example that uses CreateSemaphore, see Using Semaphore Objects .
Requirements
Minimum supported clientWindows 2000 Professional
Minimum supported serverWindows 2000 Server
HeaderWinbase.h (include Windows.h)
LibraryKernel32.lib
DLLKernel32.dll
Unicode and ANSI namesCreateSemaphoreW (Unicode) and CreateSemaphoreA (ANSI)
See Also
CloseHandle
CreateProcess
CreateSemaphoreEx
DuplicateHandle
Object Names
OpenSemaphore
ReleaseSemaphore
SECURITY_ATTRIBUTES
Semaphore Objects
Synchronization Functions
Send comments about this topic to Microsoft
Build date: 8/27/2009
==原始网址==http://msdn.microsoft.com/en-us/library/ms682438(VS.85).aspx\n
随便看

 

windows api函数参考手册包含2258条windows api函数文档,详细介绍nodejs、java、rust调用windows api的方法技巧,是学习windows api编程的入门中文文档。

 

Copyright © 2004-2023 Winrtm.com All Rights Reserved
京ICP备2021023879号-40 更新时间:2024/10/6 13:25:23