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

时间:2010-09-08 14:27:13

标签: c++ visual-c++ mfc pthreads

为什么线程程序应该是静态的还是成员函数? 任何有效的理由?

3 个答案:

答案 0 :(得分:6)

非静态成员变量在内部由编译器传递隐式this参数。

你有

ClassInQuestion {
   void threadFunc( int );
}

并且编译器在内部创建一个函数

void ClassInQuestion_threadFunc( ClassInQuestion* thisObject, int );

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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