[MFC]同步对象——CEvent事件,CMutex互斥量

本文介绍了MFC中CEvent事件和CMutex互斥量的使用,通过实例展示了如何实现线程间的同步以及跨进程资源的安全共享。CEvent用于触发线程间的同步,而CMutex则提供了更复杂的同步机制,允许在同一应用或不同进程中控制资源的访问。
摘要由CSDN通过智能技术生成

实例——CEvent事件

头文件关键代码:
// MFCEventDlg.h : 头文件
#pragma once
#define WM_MSG WM_USER+1
typedef struct THREAD_PARAM
{
	HWND hWnd;
	int nData;
	CEvent* pEvent;
}_THREAD_PARAM;
UINT ThreadFun(LPVOID pParam);
class CMFCEventDlg : public CDialogEx
{
	//...
	//定义的成员变量
	THREAD_PARAM mThreadParam;
	CWinThread* pThread;
	// ...
};
cpp文件关键代码:
// MFCEventDlg.cpp : 实现文件
CMFCEventDlg::CMFCEventDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CMFCEventDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	pThread=NULL;
	mThreadParam.nData=0;
	mThreadParam.pEvent=new CEvent(TRUE,FALSE,L"eventDlg");
	//new CEvent(BOOL bInitiallyOwn = FALSE,BOOL bManualReset = FALSE,LPCTSTR lpszName = NULL,);  
	//bInitiallyOwn:如果为TRUE,CMultilock或CSingleLock对象的线程可用;如果为FALSE,所有要访问资源的线程必须等待。
	//bManualReset:如果为TRUE,指定事件是一个手工事件,否则事件是一个自动事件。 
	//lpszName:CEvent事件的名字
	//要访问或释放一个CEvent对象,可建立一个CSingleLock或CMultiLock对象并调用其Lock和Unlock成员函数。	要将CEvent对象的状态改为已标记(无须等待的线程),可调用SetEvent或PulseEvent。要设置一个CEvent对象为无标记(必须等待的线程),可调用ResetEvent。
}
CMFCEventDlg::~CMFCEventDlg()
{
	if (pThread)
	{
		mThreadParam.pEvent->SetEvent();//设置事件
		WaitForSingleObject(pThread->m_hThread,INFINITE);//等待线程结束
		delete pThread;
		pThread=NULL;
	}
	if (mThreadParam.pEvent)
	{
		delete mThreadParam.pEvent;
		mThreadParam.pEvent=NULL;
	}
}

BEGIN_MESSAGE_MAP(CMFCEventDlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值