【发布时间】:2013-08-16 06:46:02
【问题描述】:
关于 C++ 中的函数指针,类函数和全局函数有什么区别?我在问,因为如果函数是类成员,Windows CreateThread 方法似乎不接受线程代码进入的函数。
当它是一个全局方法时,我可以将函数(线程代码进入)传递给 CreateThread 消息,但是一旦我将它设为类的成员,我就会收到错误“[方法布局]类型的参数是与 LPTHREAD_START_ROUTINE 类型的参数不兼容”。 ClassName::* 现在在中间;这对它有影响吗?
解决方法是什么?
【问题讨论】:
-
C++11 中的 lambdas 或之前的 boost::bind - 发布有问题的代码,我们将向您展示如何
-
可能的线程函数的签名必须完全匹配,Win32-API 是纯 C API,不适用于 C++ 类。
-
@doctorlove, 结果与
CreateThread取的函数指针不兼容。 -
在 C++11 中,您可能会考虑切换到标准线程库。然后它类似于
thread([this]{member();}),而不是正确答案中的胡言乱语,具有便携性作为奖励。 -
@MikeSeymour,好点,我不知道为什么我没有想到。我会把它放在一个显眼的地方。
标签: c++ function class pointers