因为静态是针对类的,而成员变量为对象所有。
如果要访问的话:
一:可以把要用的参数通过void * argslist 传递进线程函数
二:设置一个静态变量,静态变量可以指向你要调用对象的,然后在线程函数中直接调用
三:可以把类成员变量设置成静态的,这样就可以在线程函数中直接调用
看看你的代码int val=a是不可能调用的因为没有this指针,你可以采用我的第一个方案,传递进一个this指针,表明a是属于哪个对象的
//或者有没有办法在启动线程的时候使用类的成员函数?
不可能的否则你会产生大错的,因为线程函数是不会传递进this指针的,没有this指针成员函数不能工作,因此不可能把成员函数做线程函数的!但是因静态成员函数不需要this就可以工作,因此可以用做线程函数。(参见:《win32多线程程序设计》)
代码如下: class test { private: int a; int b; public: test() { } static void loop(void * argslist ) { test *This=(test*)argslist; int val=This->a; while(1) { Sleep(1000); } } int StartThread() { return _beginthread(loop,0,(void*)this); } }; int main() { test *t= new test(); t->StartThread(); return 0; }