MFC多线程 信号量CSemaphore 临界区与互斥 事件

CMutex, CCriticalSection用于对资源的互斥访问。

CMutex可以跨进程使用, CCriticalSection只可以在进程内部使用。

创建CMutex需要更多的资源,只用于进程内部时使用CCriticalSection获得更高的效率。 


CCriticalSection  m_CritSection;//用于临界区 方法一
CSingleLock singleLock(&m_CritSection); //

//CMutex Mutex;//用于互斥锁 方法二
//CSingleLock singleLock(&Mutex); //
int StartMainLock()
{
	singleLock.Lock();//没被调用就上锁自己用,已被调用就等着
	if (singleLock.IsLocked())
	{
		int ret=StartMain();  //被锁的 处理内容
		singleLock.Unlock();//解锁  所有返回之前解锁
		return ret;
	}
	singleLock.Unlock();//解锁
	return -1;
}
	//事件
	HANDLE	m_hEvent= CreateEvent(NULL, FALSE, FALSE, NULL); //新建
	WaitForSingleObject(m_hEvent, INFINITE); //无限时间等待
	ResetEvent(m_hEvent); 重置 为无信号
	SetEvent(m_hEvent); //设置有信号					
	CloseHandle(m_hEvent); //关闭

CSemaphore指定资源的线程的计数


版权声明:本文为chenhao0568原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。