C ++ class creates a thread

Often encounter the need to create a thread in the class, you can use a static member function, and the class instance pointer incoming thread function manner.

Code that implements the following code:

/* 类头文件 CTestThread.h */
#include<iostream>
#include<process.h>
#include<Windows.h>

class TestThread
{
public:
    TestThread();
    ~TestThread();

     int StartThread();  // 开线程
     int SetStopFlag(bool flag); //停止线程

private:
    static unsigned int WINAPI ThreadFunc(LPVOID lpParam);  //线程函数

private:
    bool m_bStopFlag;
};

/* 类源文件 CTestThread.cpp */

#include "CTestThread.h"

TestThread::TestThread()
{
    m_bStopFlag = false;
}

TestThread::~TestThread()
{
    m_bStopFlag = true;

}


int TestThread::StartThread()
{
    HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &ThreadFunc, (LPVOID)this, 0, NULL);

    return 0;
}

int TestThread::SetStopFlag(bool flag)
{
    m_bStopFlag = flag;
    return 0;
}

unsigned int WINAPI TestThread::ThreadFunc(LPVOID lpParam)
{
    TestThread* pthis = (TestThread*)lpParam;
    while (!pthis->m_bStopFlag)
    {
        printf("ThreadFunc is running cassid is %d .\n",pthis->m_classid);
        Sleep(1000);
    }
    printf("ThreadFunc return.\n");
    return 0;
}
/* 测试代码 test.cpp */

#include "CTestThread.h"

int main()
{
    TestThread testThread(1);
    testThread.StartThread();

    char ch;
    while (ch = getchar())
    {
        if (ch == 'q' || ch == 'Q')
        {
            testThread.SetStopFlag(true);
            break;
        }   
        Sleep(1000);
    }
}

Guess you like

Origin www.cnblogs.com/ay-a/p/11409233.html