为啥线程过程应该是静态或成员函数
Posted
技术标签:
【中文标题】为啥线程过程应该是静态或成员函数【英文标题】:why does thread procedure should be static or member function为什么线程过程应该是静态或成员函数 【发布时间】:2010-09-08 14:27:13 【问题描述】:为什么线程过程应该是静态或成员函数? 有什么正当理由吗?
【问题讨论】:
没有更具体的上下文编号。顺便说一句,标记 MFC 和 PThreads 的任何特殊原因?我认为同时使用这两个库的情况很少见。 【参考方案1】:非静态成员变量具有编译器内部传递的隐式this
参数。
你有
ClassInQuestion
void threadFunc( int );
编译器在内部创建一个函数
void ClassInQuestion_threadFunc( ClassInQuestion* thisObject, int );
因此,除非线程过程接受一个指针 t 一个具有ClassInQuestion*
类型的第一个参数的函数,否则它将与预期的函数签名不匹配。
【讨论】:
我也误读了这个问题,但是对于 mfc,以下表明需要一个免费或静态成员函数:go4expert.com/forums/showthread.php?t=3197 和 pthreads (C-API),这似乎很明显,所以我猜这个问题有点草率。【参考方案2】:主要是因为非静态成员函数有一个隐含的参数,导致函数指针的填写比较困难。我猜想在指定非静态成员函数时,您还希望对象是已知的,这与函数的工作方式不同。
【讨论】:
【参考方案3】:通常,线程过程必须由具有回调机制的线程库中的预定义函数调用。为了能够调用成员函数(不是静态的),您需要调用该函数的类的对象。但是,没有可用的线程库支持这一点,即它们不接受将用于调用注册函数的对象。所以所有这些函数都应该是静态的并适当地进行类型转换。
【讨论】:
以上是关于为啥线程过程应该是静态或成员函数的主要内容,如果未能解决你的问题,请参考以下文章