C++ 从另一个thead访问类函数?
我的类中有一个函数,它创建一个线程,并为它提供参数来调用属于该类的函数,但由于线程进程必须是静态的,因此我无法访问该类的任何成员。如果不使用cpp文件中的一组静态成员来临时提供要处理的数据,如何做到这一点,这似乎很慢 以下是我的意思的一个例子: 在cpp文件中:C++ 从另一个thead访问类函数?,c++,multithreading,class,C++,Multithreading,Class,我的类中有一个函数,它创建一个线程,并为它提供参数来调用属于该类的函数,但由于线程进程必须是静态的,因此我无法访问该类的任何成员。如果不使用cpp文件中的一组静态成员来临时提供要处理的数据,如何做到这一点,这似乎很慢 以下是我的意思的一个例子: 在cpp文件中: void myclass::SetNumber(int number) { numberfromclass = number; } void ThreadProc(void *arg) { //Can't do this
void myclass::SetNumber(int number)
{
numberfromclass = number;
}
void ThreadProc(void *arg)
{
//Can't do this
myclass::SetNumber((int)arg);
}
我不能这样做,因为SetNumber必须是静态的,但我经常引用我的类,所以这不起作用
我能做什么
谢谢通常您将myclass对象的地址指定为
arg
type,并将其强制转换到ThreadProc中。但是,您将无法了解如何传递int参数
void ThreadProc(void *arg)
{
myclass* obj = reinterpret_cast<myclass*>(arg);
//Can't do this
obj->SetNumber(???);
}
void ThreadProc(void*arg)
{
myclass*obj=重新解释铸件(arg);
//不能这样做
obj->SetNumber(???);
}
正如您所说,这可能不仅有点慢,而且会使代码混乱。我建议将其用于参数绑定,并以您可以使用的独立于操作系统的方式(至少对于您自己的源代码)创建线程。那么线程就不需要静态方法了
现在在C++0x标准中,这里有一个我建议您为此使用一个
静态
方法创建一个友好的类。看起来干净多了。例如:-
class FriendClass
{
public:
static void staticPublicFunc(void* );
};
现在在你的主课上和上面的同学交朋友
class MyClass
{
friend void FriendClass::staticPublicFunc(void*);
};
这应该使您能够将
友元函数
设置为线程函数
,并在每个线程中访问每个实例的类。确保同步您对跨线程可见数据的访问。哦,好吧,我只传递一个结构,其中1个成员是自指针,如果您真的反对boost使用,这可能是一个解决方案。但是请注意,这些东西现在是主要编译器支持的新C++0x标准的一部分,因此使用起来并不奇怪。它们在不同的名称空间中:std而不是boost