我的类中有一个函数,它创建一个线程并给它调用一个函数的参数,该函数是该类的一部分,但由于线程procs必须是静态的,我无法访问任何类的成员。如果不使用cpp文件中的一堆静态成员临时提供数据操作,怎么办呢,这看起来很慢。
以下是我的意思的一个例子:
在cpp文件中:
void myclass::SetNumber(int number)
{
numberfromclass = number;
}
void ThreadProc(void *arg)
{
//Can't do this
myclass::SetNumber((int)arg);
}
我不能这样做,因为SetNumber必须是静态的,但是我的课程很多,所以不会起作用。
我该怎么办?
由于
答案 0 :(得分:1)
通常你将myclass对象的地址指定为arg
类型并将其强制转换为ThreadProc。但是,你将被阻止如何传递int参数。
void ThreadProc(void *arg)
{
myclass* obj = reinterpret_cast<myclass*>(arg);
//Can't do this
obj->SetNumber(???);
}
正如你所说,这可能不仅有点慢,而且还会使代码混乱。我建议使用boost::bind
进行参数绑定,并以os独立的方式创建线程(至少对于你自己的源),你可以使用boost::thread
。那么你的线程就不需要静态方法了。
现在在C ++ 0x标准中,这里是small tutorial
答案 1 :(得分:0)
我建议你为此目的用static
方法制作一个友好的课程。它看起来更干净。例如: -
class FriendClass
{
public:
static void staticPublicFunc(void* );
};
现在在你的主要班级与上述班级成为朋友......
class MyClass
{
friend void FriendClass::staticPublicFunc(void*);
};
这使您可以将friend-function
设置为thread-function
并访问每个线程中每个实例的类。确保同步访问跨线程可见的数据。