windows线程的封装

xiaoxiao2021-03-01  7

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; }

转载请注明原文地址: https://www.6miu.com/read-3350362.html

最新回复(0)