http://blog.csdn.net/morewindows/article/details/7445233
http://blog.csdn.net/morewindows/article/details/7445233
事件Event
第一个 CreateEvent
函数功能:创建事件
函数原型:
HANDLECreateEvent(
LPSECURITY_ATTRIBUTESlpEventAttributes,
BOOLbManualReset,
BOOLbInitialState,
LPCTSTRlpName
);
第一个参数表示安全控制,一般直接传入NULL。
第二个参数确定事件是手动置位还是自动置位,传入TRUE表示手动置位,传入FALSE表示自动置位。如果为自动置位,则对该事件调用WaitForSingleObject()后会自动调用ResetEvent()使事件变成未触发状态。打个小小比方,手动置位事件相当于教室门,教室门一旦打开(被触发),所以有人都可以进入直到老师去关上教室门(事件变成未触发)。自动置位事件就相当于医院里拍X光的房间门,门打开后只能进入一个人,这个人进去后会将门关上,其它人不能进入除非门重新被打开(事件重新被触发)。
第三个参数表示事件的初始状态,传入TRUR表示已触发。
第四个参数表示事件的名称,传入NULL表示匿名事件。
第二个 OpenEvent
函数功能:根据名称获得一个事件句柄。
函数原型:
HANDLEOpenEvent(
DWORDdwDesiredAccess, 第一个参数表示访问权限,对事件一般传入EVENT_ALL_ACCESS
BOOLbInheritHandle, 事件句柄继承性,一般传入TRUE即可。
LPCTSTRlpName //名称 不同进程中的各线程可以通过名称来确保它们访问同一个事件。
);
第三个SetEvent
函数功能:触发事件
函数原型:BOOLSetEvent(HANDLEhEvent);
函数说明:每次触发后,必有一个或多个处于等待状态下的线程变成可调度状态。
第四个ResetEvent
函数功能:将事件设为末触发
函数原型:BOOLResetEvent(HANDLEhEvent);
CloseHandle()就可以完成清理与销毁了。
信号量
第一个 CreateSemaphore
函数功能:创建信号量
函数原型:
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,参数表示安全控制,一般直接传入NULL。
LONG lInitialCount, 初始资源数量。
LONG lMaximumCount, 参数表示最大并发数量。
LPCTSTR lpName 信号量的名称,传入NULL表示匿名信号量。
);
第二个 OpenSemaphore
函数功能:打开信号量
函数原型:
HANDLE OpenSemaphore(
DWORD dwDesiredAccess,参数表示访问权限,对一般传入SEMAPHORE_ALL_ACCESS
BOOL bInheritHandle,信号量句柄继承性,一般传入TRUE即可。
LPCTSTR lpName不同进程中的各线程可以通过名称来确保它们访问同一个信号量
);
第三个 ReleaseSemaphore
函数功能:递增信号量的当前资源计数
函数原型:
BOOL ReleaseSemaphore(
HANDLE hSemaphore, 信号量的句柄。
LONG lReleaseCount, 第二个参数表示增加个数,必须大于0且不超过最大资源数量。
LPLONG lpPreviousCount 传出先前的资源计数,设为NULL表示不需要传出。
);
注意:当前资源数量大于0,表示信号量处于触发,等于0表示资源已经耗尽故信号量处于末触发。在对信号量调用等待函数时,等待函数会检查信号量的当前资源计数,如果大于0(即信号量处于触发状态),减1后返回让调用线程继续执行。一个线程可以多次调用等待函数来减小信号量。
最后一个 信号量的清理与销毁
由于信号量是内核对象,因此使用CloseHandle()就可以完成清理与销毁了。