由于MFC中本身就存在工作线程和界面线程两个线程,故MFC的线程创建与普通的C++线程创建不太一样。
具体代码
//头文件中
//声明静态的线程函数,必须是静态
public:
static UINT A(LPVOID nParam);//声明A线程
static UINT B(LPVOID nParam);//声明B线程
//由于静态函数中无法直接引用非静态的变量,故类中的成员变量就无法正常使用了;
//需要另外写非静态的函数用于进行实际线程的工作
void AFunction();//A线程调用的非静态函数
void BFunction();//B线程调用的非静态函数
//声明存储线程的数组
CWinThread** Thread;
//源文件中
//创建线程
Thread = new CWinThread*[2];//创建两个线程
//分别将两个线程与静态线程函数联系起来
Thread[0] = AfxBeginThread(A, (LPVOID)this);
Thread[1] = AfxBeginThread(B, (LPVOID)this);
//让线程开始工作
for(int i=0;i<2;++i)
Thread[i]->Run();
//A线程
UINT MyClass::A(LPVOID pParam)
{
MyClass* ApWnd = (MyClass*)pParam;
ApWnd->AFunction();//调用非静态函数
return 0;
}
//B线程
UINT MyClass::B(LPVOID pParam)
{
MyClass* BpWnd = (MyClass*)pParam;
BpWnd->BFunction();//调用非静态函数
return 0;
}