为什么线程程序应该是静态的还是成员函数? 任何有效的理由?
答案 0 :(得分:6)
非静态成员变量在内部由编译器传递隐式this
参数。
你有
ClassInQuestion {
void threadFunc( int );
}
并且编译器在内部创建一个函数
void ClassInQuestion_threadFunc( ClassInQuestion* thisObject, int );
因此,除非线程过程接受指针t具有类型为ClassInQuestion*
的第一个参数的函数,否则它将与预期的函数签名不匹配。
答案 1 :(得分:3)
主要是因为非静态成员函数具有隐式参数,因此很难填充函数指针。我想在指定非静态成员函数时,您还希望知道该对象,这与其他函数的工作方式不同。
答案 2 :(得分:2)
通常,线程程序必须由具有回调机制的线程库中的预定义函数调用。为了能够调用成员函数(非静态),您需要一个将调用该函数的类的对象。但是,没有可用的线程库支持这一点,即它们不接受将用于调用注册函数的对象。因此,所有这些函数都应该是静态的并且适当地进行类型化。