15,471
社区成员
发帖
与我相关
我的任务
分享
//-------------------------------demo.h----------------------------------------------
class CDemo
{
public:
CDemo(void);
~CDemo(void);
void Lock();
void UnLock();
private:
HANDLE m_hread;
};
//-------------------------------demo.cpp----------------------------------------------
#include "StdAfx.h"
#include "Demo.h"
CDemo::CDemo(void)
:m_nread(0)
{
m_hread = CreateMutex(NULL, FALSE, NULL);
}
CDemo::~CDemo(void)
{
CloseHandle(m_hread);
}
void CDemo::Lock(DWORD n)
{
WaitForSingleObject(m_hread, INFINITE);
AfxTrace(TEXT("LOCK %d\r\n"), ::GetCurrentThreadId());
}
void CDemo::UnLock(DWORD n)
{
AfxTrace(TEXT("Release %d\r\n"), ::GetCurrentThreadId());
if (!ReleaseMutex(m_hread))
{
TRACE("FAILED TO RELEASE\r\n");
}
}
//-------------------------------test.cpp---------------------------------------------
static UINT WINAPI LockThread(void *);
static UINT WINAPI UnLockThread(void *);
UINT CTest::LockThread(void *p)
{
CDemo *pP = static_cast<CDemo*>(p);
pP->Lock();
}
UINT CTest::UnLockThread(void *p)
{
CDemo* pP = static_cast<CDemo*>(p);
pP->UnLock();
}
CTest::OnBnTest()
{
const int THREAD_COUNT;
HANDLE hThreads[THREAD_COUNT + 1];
//...
HANDLE hThread1 = (HANDLE)_beginthreadex(NULL, 0, &LockThread, &demo, 0, NULL);
HANDLE hThread2 = (HANDLE)_beginthreadex(NULL, 0, &UnLockThread, &demo, 0, NULL);
}