1.用AfxBeginThread函数创建线程
CWinThread* pThread;
pThread=AfxBeginThread(ThreadFunc, &Info);
其中:
ThreadFunc是线程运行的函数,定义如下
UINT ThreadFunc(LPVOID lpParam);
具体内容
UINT ThreadFunc(LPVOID lpParam)
{
threadInfo* pInfo=(threadInfo*)lpParam;
pInfo->cEdit->SetWindowText("hello world");
return 0;
}
&Info是传给ThreadFunc函数的参数
struct threadInfo
{
CEdit* cEdit;
};
threadInfo Info; //在开始线程前可以对Info中的成员赋值,之后再传给线程函数进行相应的处理
2. 用_beginthreadex函数创建线程
Thread_RunLibnids * thread1 = new Thread_RunLibnids();//Thread_RunLibnids 是自己随便定义的一个类,
// thread1 将作为参数传递给线程函数
HANDLE hth1;
unsigned uiThread1ID;
hth1 = (HANDLE)_beginthreadex( NULL, // security
0, // stack size
ThreadStaticEntryPoint,
thread1, // arg list
0, // so we can later call ResumeThread()
&uiThread1ID );
线程函数定义如下:
unsigned __stdcall ThreadStaticEntryPoint(void * pThis);
unsigned __stdcall ThreadStaticEntryPoint(void * pThis)
{
Thread_RunLibnids * pthX = (Thread_RunLibnids*)pThis; //因为在线程中需要调用Thread_RunLibnids类中的函数,所以
//将其作为参数,理论上ThreadStaticEntryPoint这个函数中是
//可以进 行任何合理操作的。
while(boolflag)
{
................
}
// A thread terminates automatically if it completes execution,
// or it can terminate itself with a call to _endthread().
_endthread() ; //结束线程
return 1; // the thread exit code
}
一般的线程函数不包含在类中,如果是类的成员函数,就需要声明为静态类型。