我想在C ++中使用TBB线程,并希望使用“tbb_thread”API。
例如我在类中有静态函数,如下所示
template < typename threadFuncParamT >
class ThreadWrapper
{
public:
static int ThreadRoutineFunction(void* pParam);
};
我想使用tbb_thread API来生成一个带有“ThreadRoutineFunction”的线程,该线程在类上面定义。我怎样才能使用tbb_thread API实现这一目标。请注意,我必须将指针传递给线程例程函数。任何人都可以举例说明如何做到这一点吗?
答案 0 :(得分:1)
听起来你的问题确实是“如何获得指向static
成员函数的指针?”
C ++没有正式的方法可以做到这一点。但是,根据C++ FAQ(问题2中的注释),“指针 - static
- 成员函数通常类型兼容常规指针 - 功能“。
您的选择是:
使用常规指针指向函数,将其指向static
成员函数,查看编译器是否抱怨:
int (*ptrFunction)(void*) = ThreadWrapper<Foo>::ThreadRoutineFunction;
执行常见问题解答建议,并声明您的函数extern "C"
以及static
(您还必须将指向函数的指针声明为extern "C"
,并且你将无法重载该功能):
template <typename T> class ThreadWrapper {
public:
extern "C" static int ThreadRoutineFunction(void* param);
};
extern "C" int(*ptrCFunction)(void*) = ThreadWrapper<Foo>::ThreadRoutineFunction;
创建一个额外的函数,除了调用static
成员函数之外什么都不做:
template <typename T> int ThreadWrapperHelper(void* param)
{
return ThreadWrapper<T>::ThreadRoutineFunction(param);
}
int (*ptrFunction)(void*) = ThreadWrapperHelper<Foo>;