MFC线程同步CriticalSection
int ccc;
CRITICAL_SECTION lpCriticalSection; UINT __cdecl ThreadProc1( LPVOID pParam ){//UINT = 无符号的int类型,4个字节,看平台决定 C界面线程Dlg* t = (C界面线程Dlg*)pParam;//强制类型转换 int i=0; while(i<50){ EnterCriticalSection(&lpCriticalSection);//锁定 ccc++; i++; Sleep(1); CString str; str.Format("%d\r\n",ccc); t->myedit1+=str; LeaveCriticalSection(&lpCriticalSection);//解锁 ::SendMessage(t->GetSafeHwnd(), WM_MyMessage, 0,0);//发送了,如果 想在不是主线程的线程中操作窗口的话,就用发送消息 } return 0; } void C界面线程Dlg::OnBnClickedButton6() { ccc = 0; this->myedit1=""; for(int i=0;i<20;i++){ AfxBeginThread(ThreadProc1,this); } } UINT __cdecl ThreadProc2( LPVOID pParam ){//UINT = 无符号的int类型,4个字节,看平台决定 C界面线程Dlg* t = (C界面线程Dlg*)pParam;//强制类型转换 int i=0; while(i<50){ ccc++; i++; Sleep(1); CString str; str.Format("%d\r\n",ccc); t->myedit1+=str; ::SendMessage(t->GetSafeHwnd(), WM_MyMessage, 0,0);//发送了,如果 想在不是主线程的线程中操作窗口的话,就用发送消息 } return 0; } void C界面线程Dlg::OnBnClickedButton8() { this->myedit1=""; ccc = 0; for(int i=0;i<20;i++){ AfxBeginThread(ThreadProc2,this); } } void C界面线程Dlg::OnCancel() { // TODO: 在此添加专用代码和/或调用基类 DeleteCriticalSection(&lpCriticalSection); CDialog::OnCancel(); }
初始化函数放在初始化对话框里面:InitializeCriticalSection(&lpCriticalSection);


浙公网安备 33010602011771号