0

我想在 C++ 中使用 TBB 线程并想使用“tbb_thread”API。

例如,我在类中有静态函数,如下所示

template < typename threadFuncParamT >
class ThreadWrapper
{
public:
    static int ThreadRoutineFunction(void* pParam);
};

我想使用 tbb_thread API 来生成一个带有“ThreadRoutineFunction”的线程,该线程在上面的类中定义。我如何使用 tbb_thread API 来实现这一点。请注意,我必须将指针传递给线程例程函数。谁能给我一个简单的例子如何做到这一点?

4

1 回答 1

1

听起来您的问题实际上是“如何获得指向static成员函数的指针?”

C++ 没有正式的方法来做到这一点。但是,根据C++ FAQ(问题 2 中的注释),“指向static成员函数的指针通常与常规指向函数的指针类型兼容。”

您的选择是:

  1. 使用指向函数的常规指针,将其指向您的static成员函数,看看您的编译器是否抱怨:

    int (*ptrFunction)(void*) = ThreadWrapper<Foo>::ThreadRoutineFunction;
    
  2. 按照常见问题解答的建议进行操作,并声明您的函数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;
    
  3. 创建一个除了调用static成员函数之外什么都不做的附加函数:

    template <typename T> int ThreadWrapperHelper(void* param)
    {
        return ThreadWrapper<T>::ThreadRoutineFunction(param);
    }
    
    int (*ptrFunction)(void*) = ThreadWrapperHelper<Foo>;
    
于 2011-08-03T14:46:53.490 回答