c++回调函数跨线程的调用
在C++中,回调函数跨线程调用可以利用类成员方法的特性来实现。类成员方法在编译时会被转化成普通函数,并且在原第一个参数前插入指向对象本身的`this`指针。因此,可以将类成员方法作为线程回调函数,通过联合类将类成员方法指针转换为普通函数指针,然后传递给`_beginthread`函数来启动线程。
以下是一个示例代码:
```cpp
#include <stdio.h>
#include <process.h>
class TMyClass {
public:
TMyClass(int nId, int nCount) : m_nId(nId), m_nCount(nCount) {}
void _USERENTRY ThreadProc() {
//根据m_nCount成员打印一排数字
for (int i = 0; i < m_nCount; i++)
printf("Class%d : %d\n", m_nId, i);
}
union {
void (_USERENTRY *Threadproc)(void *);
void (_USERENTRY TMyClass::*MemberProc)();
} Proc;
};
int main(int argc, char*argv[]) {
TMyClass MyClass1(1, 10), MyClass2(2, 5);
// 转换,proc.ThreadProc就是对应的普通函数指针了
Proc.MemberProc = &TMyClass::ThreadProc;
// 开始线程,这里的proc.ThreadProc实际上是TMyClass::ThreadProc, 它要的this指针是我们给的&MyClass1
指针调用成员函数 _beginthread(proc.Threadproc, 4096, &MyClass1);
_beginthread(proc.Threadproc, 4096, &MyClass2);
system("pause");
return 0;
}
```
在上述示例中,`TMyClass`类定义了一个`ThreadProc`类成员方法,并通过联合类将其指针转换为普通函数指针,然后传递给`
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论