这个看你线程函数怎么写了,如果你创建线程的时候传个类实例对象的指针,然后在线程函数里调用该对象的成员函数,就可以使用类实例中的变量。例:DWORD gThreadProc(LONG);
class a
{
public:
void StartThread();
DWORD ThreadProc();
...
}
void a::StartThread()
{
DWORD gdwThreadId = 0;
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)gThreadProc,this,0,&gdwThreadId);
}
DWORD gThreadProc(LONG lParam)
{
a* pThis = (a*)lParam;
return pThis->ThreadProc();
}全局的线程函数又转到了类成员函数,在a::ThreadProc()里面可以访问哪些变量就不用我说了吧。
class a
{
public:
void StartThread();
DWORD ThreadProc();
...
}
void a::StartThread()
{
DWORD gdwThreadId = 0;
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)gThreadProc,this,0,&gdwThreadId);
}
DWORD gThreadProc(LONG lParam)
{
a* pThis = (a*)lParam;
return pThis->ThreadProc();
}全局的线程函数又转到了类成员函数,在a::ThreadProc()里面可以访问哪些变量就不用我说了吧。
不一定要是全局或静态的,如3楼"线程函数中使用变量时要么是在自己函数内部定义的局部变量,要么是外部的全局变量或者是静态变量"-------------------------------------------------
能够直接使用类实例中的变量吗?
可以,如果要使用某个类实例的变量,就把该类的指针传如线程中,在线程里使用该指针即可,如下:class A
{
int b;
};DWORD MyThread(LPVOID param);A aa;
DWORD id;
CreateThread(NULL,NULL,MyThread,(LPVOID)&aa,NULL,&id);//在线程里面
DWORD MyThread(LPVOID param)
{
A *p = (A *)param;
p->b = 5; //这里就可以直接使用类实例里面的变量了
return 0;
}
http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jthread记得给分哦楼主。