C++ 为什么线程过程应该是静态的还是成员函数

C++ 为什么线程过程应该是静态的还是成员函数,c++,visual-c++,mfc,pthreads,C++,Visual C++,Mfc,Pthreads,为什么线程过程应该是静态的还是成员函数? 任何有效的原因?非静态成员变量有一个由编译器内部传递的隐式参数 你有 ClassInQuestion { void threadFunc( int ); } 编译器在内部创建一个函数 void ClassInQuestion_threadFunc( ClassInQuestion* thisObject, int ); 因此,除非线程过程接受指针t,否则具有类型为ClassInquest*的第一个参数的函数将与预期的函数签名不匹配。主要是因为非

为什么线程过程应该是静态的还是成员函数?
任何有效的原因?

非静态成员变量有一个由编译器内部传递的隐式
参数

你有

ClassInQuestion {
   void threadFunc( int );
}
编译器在内部创建一个函数

void ClassInQuestion_threadFunc( ClassInQuestion* thisObject, int );

因此,除非线程过程接受指针t,否则具有类型为
ClassInquest*
的第一个参数的函数将与预期的函数签名不匹配。

主要是因为非静态成员函数有一个隐式参数,因此很难填充函数指针。我猜,在指定非静态成员函数时,您还希望对象是已知的,这与函数的其他工作方式不同。

通常,线程过程必须由具有回调机制的线程库中的预定义函数调用。为了能够调用成员函数(不是静态的),您需要调用函数的类的对象。但是,所有可用的线程库都不支持这一点,即它们不接受将用于调用已注册函数的对象。因此,所有这些函数都应该是静态的,并进行适当的类型转换。

没有更具体的上下文号。顺便说一句,标记MFC和PThreads有什么特别的原因吗?我认为同时使用这两个库是很少见的。我也误解了这个问题,但是对于mfc,下面的说明表明需要一个自由的或静态的成员函数:对于pthreads(C-API),这似乎很明显,所以我猜这个问题有点草率。