我有一个cThread类C++ API,并且此方法来创建一个线程:C++指针的函数作为参数
void cThread::start(void(*a_function)(void), CThreadPriority a_level);
我已经做了类和init()方法来启动螺纹和updateHaptics()方法由线程执行:
void EntryClass::init()
{
typedef void (EntryClass::*method)();
method p;
p = &EntryClass::updateHaptics;
// create a thread which starts the main haptics rendering loop
cThread* hapticsThread = new cThread();
hapticsThread->start(p, CTHREAD_PRIORITY_HAPTICS);
}
void EntryClass::updateHaptics(void)
{
// ...
}
我的问题是要通过updateHaptics()方法的一个参数cThread ::开始()方法。
我得到这个错误:
1>EntryClass.cpp(55): error C2664: 'void chai3d::cThread::start(void (__cdecl *)(void *),const chai3d::CThreadPriority,void *)' : impossible de convertir l'argument 1 de 'method' en 'void (__cdecl *)(void)'
REM:我的Windows 8/Visual Studio中
updateHaptics必须一个函数或一个静态方法。 – jsantander
不幸的是,该API基本上被打破了,因为没有办法将任何数据传递给线程,因此也没办法提供一个类对象来调用成员函数。我会切换到标准的线程库(或者Boost,如果你被一个古老的编译器困住了)。 –
这是因为,成员类的函数名称是由类的名称装饰的。静态功能没有装饰。 – LukeCodeBaker