关闭

CEvent eventWriteD.SetEvent();

478人阅读 评论(0) 收藏 举报
CEvent eventWriteD;
char g_Array[10];

UINT WriteW(LPVOID pParam);
UINT WriteD(LPVOID pParam);

void CMultiThread9Dlg::OnWritew() 
{
	// TODO: Add your control notification handler code here
	CWinThread *pWriteW=AfxBeginThread(WriteW,
		&m_ctrlW,
		THREAD_PRIORITY_NORMAL,
		0,
		CREATE_SUSPENDED);
	pWriteW->ResumeThread();
	
	CWinThread *pWriteD=AfxBeginThread(WriteD,
		&m_ctrlD,
		THREAD_PRIORITY_NORMAL,
		0,
		CREATE_SUSPENDED);
    pWriteD->ResumeThread();	
}
/*
  仔细分析这两个线程函数, 
您就会正确理解CEvent 类。
线程WriteD执行到 WaitForSingleObject(eventWriteD.m_hObject,INFINITE);
处等待,直到事件 eventWriteD为有信号该线程才往下执行,
因为eventWriteD对象是自动事件,
则当WaitForSingleObject()返回时,
系统自动把eventWriteD对象重置为无信号状态。
  */
UINT WriteW(LPVOID pParam)
{
	CEdit *pEdit=(CEdit*)pParam;
	pEdit->SetWindowText("");
	for(int i=0;i<10;i++)
	{
		g_Array[i]='W';
		pEdit->SetWindowText(g_Array);
		Sleep(1000);
	}
	//eventWriteD.SetEvent();
	/*
	BOOL CEvent::SetEvent();
    将 CEvent 类对象的状态设置为有信号状态。
	如果事件是人工事件,则 CEvent 类对象保持为有信号状态,
	直到调用成员函数 ResetEvent()将 其重新设为无信号状态时为止。
	如果CEvent 类对象为自动事件,则在SetEvent()将事件设置为有信号状态后,
	CEvent 类对象由系统自动重置为无信号状态。	  
    如果该函数执行成功,则返回非零值,否则返回零。	
	*/
	return 0;	
}

UINT WriteD(LPVOID pParam)
{
	CEdit *pEdit=(CEdit*)pParam;
	pEdit->SetWindowText("");
	WaitForSingleObject(eventWriteD.m_hObject,INFINITE);
	for(int i=0;i<10;i++)
	{
		g_Array[i]='D';
		pEdit->SetWindowText(g_Array);
		Sleep(1000);
	}
	return 0;	
}

void CMultiThread9Dlg::OnBtnSetevent() 
{
eventWriteD.SetEvent();	
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2987369次
    • 积分:40240
    • 等级:
    • 排名:第93名
    • 原创:399篇
    • 转载:4555篇
    • 译文:5篇
    • 评论:609条
    文章分类
    最新评论