经常会遇到需要在类中创建线程,可以使用静态成员函数,并且将类实例的指针传入线程函数的方式来实现。

实现代码代码如下:

/* 类头文件 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);
}
}