封装互斥类出错,求助(利用Critical Section)
在wtl工程中,由于多线程共同读写共享变量,所以自己写了个封装Critical Section api 的工具类
想实现:进入某个函数时加锁,离开函数时自动解锁,以防止自己忘记UnLock导致死锁。
所以代码如下:
/* 互斥类实现 */class CMutexImpl{public: CMutexImpl() {InitializeCriticalSection(&m_cs);} CMutexImpl(CMutexImpl &mutex){/*这个地方代码要如何实现*/} virtual ~CMutexImpl() {DeleteCriticalSection(&m_cs);} void Lock() {EnterCriticalSection(&m_cs);} void UnLock() {LeaveCriticalSection(&m_cs);}private: CRITICAL_SECTION m_cs;};/* 友好的互斥类 */class CFriendlyMutex{public: /*explicit*/ CFriendlyMutex(CMutexImpl &mutex):m_MutexImpl(mutex) { TRACE("******LOCK"); mutex.Lock(); } virtual ~CFriendlyMutex() { TRACE("******UNLOCK"); m_MutexImpl.UnLock(); }private: CMutexImpl m_MutexImpl;};UINT Global_ThreadTest( LPVOID pParam ){ /* ------------------------------------- */ CFriendlyMutex mutex(m_Mutex); //进入函数时加锁,离开函数时利用作用域特点,自动解锁 //但是有错误,提示m_Mutex未找到,按照我的理解Global_ThreadTest 是 //friend 函数,为什么访问不到private m_Mutex; CEdit *pEdit = (CEdit *)pParam; pEdit->SetWindowText(""); int iPos = g_str.Find("."); g_str = g_str.Left(iPos + 1); pEdit->SetWindowText(g_str); for (int i = 0; i != 20; ++i) { if (!bFlag){ g_str += "-"; } else{ g_str += "+"; } pEdit->SetWindowText(g_str); Sleep(500); } if (!bFlag){ bFlag = TRUE; } else{ bFlag = FALSE; } TRACE(g_str); return 0; /* ------------------------------------- */}void CCriticalSectionDemoDlg::OnBtnTest() { // TODO: Add your control notification handler code here CWinThread *pTest1 = AfxBeginThread(Global_ThreadTest, &m_Test, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED); pTest1->ResumeThread(); CWinThread *pTest2 = AfxBeginThread(Global_ThreadTest, &m_Test, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED); pTest2->ResumeThread();}