windows线程的封装.
1 封装线程类的声明
// 定义线程函数的实现接口类,供
class CThreadSink{
public:
virtual void run() = 0;
};
class CCHThread
{
public:
CCHThread(CThreadSink* pThreadSink = NULL);
~CCHThread();
public:
void SetFunc(CThreadSink* pThreadSink = NULL);
void Start();
void suspend();
void stop();
public:
static DWORD WINAPI ThreadFunction(LPVOID lpParam);
private:
HANDLE m_hthread;
};
2 封装线程类的实现
DWORD WINAPI MyThreadFunction(LPVOID lpParam)
{
CThreadSink* pThreadSink = (CThreadSink*)lpParam;
if (pThreadSink)
{
pThreadSink->run();
}
return 0;
}
CCHThread::CCHThread(CThreadSink* pThreadSink)
{
DWORD drThreadID = 0;
m_hthread = ::CreateThread(NULL, 0, &MyThreadFunction, (LPVOID)pThreadSink, CREATE_SUSPENDED, &drThreadID);
if (NULL == m_hthread)
{
DWORD dr = GetLastError();
//AfxMessageBox(_T("创建线程出错,请检查!"));
}
}
CCHThread::~CCHThread()
{
if (m_hthread)
{
::CloseHandle(m_hthread);
}
}
void CCHThread::SetFunc(CThreadSink* pThreadSink)
{
// DWORD drThreadID = 0;
// m_hthread = CreateThread(NULL, 0, MyThreadFunction, pThreadSink, CREATE_SUSPENDED, &drThreadID); // 暂停模式创建线程
// if (NULL == m_hthread)
// {
// DWORD dr = GetLastError();
// //AfxMessageBox(_T("创建线程出错,请检查!"));
// }
}
void CCHThread::Start()
{
if (m_hthread)
{
ResumeThread(m_hthread);
}
}
void CCHThread::suspend()
{
if (m_hthread)
{
SuspendThread(m_hthread);
}
}
void CCHThread::stop()
{
if (m_hthread)
{
::WaitForSingleObject(m_hthread, INFINITE);
}
}
DWORD WINAPI CCHThread::ThreadFunction(LPVOID lpParam)
{
CThreadSink* pThreadSink = (CThreadSink*)lpParam;
if (pThreadSink)
{
pThreadSink->run();
}
return 0;
}