MFC线程同步_CreateMeutex

 

HANDLE  mutex;
void C界面线程Dlg::OnCancel()
{
    // TODO: 在此添加专用代码和/或调用基类

        DeleteCriticalSection(&lpCriticalSection);
        CloseHandle(mutex);
    
    CDialog::OnCancel();
}

UINT __cdecl ThreadProc3( LPVOID pParam ){//UINT = 无符号的int类型,4个字节,看平台决定
    
    C界面线程Dlg* t = (C界面线程Dlg*)pParam;//强制类型转换
    int i=0;
    while(i<50){

        //INFINITE表示永久等待,WaitForSingleObject这个方法表示等到内核对象为受信状态
            DWORD ret = WaitForSingleObject(mutex,INFINITE);//永久等待,Sing表示等待单个,也有muilte多个的,相当于进入屋子,然后加一把锁
            if(ret == WAIT_ABANDONED || ret == WAIT_OBJECT_0){//WAIT_ABANDONED为异常,WAIT_OBJECT_0为正常等待成功
            ccc++;
            i++;
            Sleep(1);
            CString str;
            str.Format("%d\r\n",ccc);
            t->myedit1+=str;
            ReleaseMutex(mutex);//相当于从屋子里面走出去,相当于把无信号变成有信号,让下一个线程得到信号
            }
            ::SendMessage(t->GetSafeHwnd(), WM_MyMessage, 0,0);//发送了,如果 想在不是主线程的线程中操作窗口的话,就用发送消息
        
    }
    return 0;
}

void C界面线程Dlg::OnBnClickedButton9()
{
    mutex = ::CreateMutex(NULL,FALSE,NULL);//安全,属于哪个线程,名字,因为我们不需要打开这个互斥体,所以名字为NULL 
    this->myedit1="";
    ccc = 0;
        for(int i=0;i<20;i++){

    AfxBeginThread(ThreadProc3,this);
    }

}

 

posted @ 2013-08-03 20:28  宝贝,我永远都在  阅读(170)  评论(0)    收藏  举报