【发布时间】:2010-09-08 14:27:13
【问题描述】:
为什么线程过程应该是静态或成员函数? 有什么正当理由吗?
【问题讨论】:
-
没有更具体的上下文编号。顺便说一句,标记 MFC 和 PThreads 的任何特殊原因?我认为同时使用这两个库的情况很少见。
标签: c++ visual-c++ mfc pthreads
为什么线程过程应该是静态或成员函数? 有什么正当理由吗?
【问题讨论】:
标签: c++ visual-c++ mfc pthreads
非静态成员变量具有编译器内部传递的隐式this 参数。
你有
ClassInQuestion {
void threadFunc( int );
}
编译器在内部创建一个函数
void ClassInQuestion_threadFunc( ClassInQuestion* thisObject, int );
因此,除非线程过程接受一个指针 t 一个具有ClassInQuestion* 类型的第一个参数的函数,否则它将与预期的函数签名不匹配。
【讨论】:
主要是因为非静态成员函数有一个隐含的参数,导致函数指针的填写比较困难。我猜想在指定非静态成员函数时,您还希望对象是已知的,这与函数的工作方式不同。
【讨论】:
通常,线程过程必须由具有回调机制的线程库中的预定义函数调用。为了能够调用成员函数(不是静态的),您需要调用该函数的类的对象。但是,没有可用的线程库支持这一点,即它们不接受将用于调用注册函数的对象。所以所有这些函数都应该是静态的并适当地进行类型转换。
【讨论】: