如何使用任意非静态类方法调用AfxBeginThread?也许boost bind可以做些什么?以下是Microsoft的预期用法(这是调用非静态方法的示例,但它是对哪种方法进行了硬编码):

UINT MyThreadProc( LPVOID pParam )
{
    CMyObject* pObject = (CMyObject*)pParam;

    if (pObject == NULL ||
        !pObject->IsKindOf(RUNTIME_CLASS(CMyObject)))
    return 1;   // if pObject is not valid

    // do something with 'pObject'

    return 0;   // thread completed successfully
}

// inside a different function in the program
...
pNewObject = new CMyObject;
AfxBeginThread(MyThreadProc, pNewObject);

最佳答案

您将需要一个静态函数来传递给AfxBeginThread,但它可以是调用对象的非常简单的函数。这是一个可能未经测试的模板功能。

template<class T>
UINT __cdecl StartThread(LPVOID pParam)
{
    return ((T*)pParam)->MyThreadProc();
}

关于c++ - 用类成员函数调用AfxBeginThread吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7852917/

10-09 13:32