c++:如何才能在静态函数中使用类的成员变量,//或者有没有办法在启动线程的时候使用类的成员函数?
#include"process.h"#include"windows.h"classtest{private:inta;intb;public:test(){}stat...
#include "process.h"
#include "windows.h"
class test
{
private:
int a;
int b;
public:
test()
{
}
static void loop(void * argslist )
{
int val=a; //如何才能在类中的静态函数中使用类的成员变量
while(1)
{
Sleep(1000);
}
}
int StartThread()
{
return _beginthread(loop,0,NULL); //或者有没有办法在启动线程的时候使用类的成员函数?
}
};
int main()
{
test *t= new test();
t->StartThread();
return 0;
} 展开
#include "windows.h"
class test
{
private:
int a;
int b;
public:
test()
{
}
static void loop(void * argslist )
{
int val=a; //如何才能在类中的静态函数中使用类的成员变量
while(1)
{
Sleep(1000);
}
}
int StartThread()
{
return _beginthread(loop,0,NULL); //或者有没有办法在启动线程的时候使用类的成员函数?
}
};
int main()
{
test *t= new test();
t->StartThread();
return 0;
} 展开
2个回答
展开全部
我写几种办法你参考下:
一:可以把要用的参数通过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;
}
这样解释不知道你是否明白!
还有不懂email我:quarke85@gmail.com
一:可以把要用的参数通过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;
}
这样解释不知道你是否明白!
还有不懂email我:quarke85@gmail.com
展开全部
//如何才能在类中的静态函数中使用类的成员变量
可以通过给静态函数加参数来实现,
比如
static void loop(test * argslist );
{
argslist->a=10;
argslist->a=b;
}
在类外可这样实现
test a;
test::loop(&test);
//或者有没有办法在启动线程的时候使用类的成员函数?
将类的成员函数声明成tatic DWORD WINAPI StartThread()就可以调用了,
注意beginthread这个函数中的一个参数,通过它可以将你类中的一些信息传到线程中.
可以通过给静态函数加参数来实现,
比如
static void loop(test * argslist );
{
argslist->a=10;
argslist->a=b;
}
在类外可这样实现
test a;
test::loop(&test);
//或者有没有办法在启动线程的时候使用类的成员函数?
将类的成员函数声明成tatic DWORD WINAPI StartThread()就可以调用了,
注意beginthread这个函数中的一个参数,通过它可以将你类中的一些信息传到线程中.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询