Use*_*ser 2 c++ windows multithreading boost-bind member-functions
如何使用任意非静态类方法调用 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);
Run Code Online (Sandbox Code Playgroud)
您将需要一个静态函数来传递给 AfxBeginThread,但它可以是一个调用对象的非常简单的函数。这是一个未经测试的模板函数,可能会起作用。
template<class T>
UINT __cdecl StartThread(LPVOID pParam)
{
return ((T*)pParam)->MyThreadProc();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13502 次 |
| 最近记录: |