我想使用_beginthreadex()
创建一个工作线程。但是,编译器说:
Error 1 error C2276: '&' : illegal operation on bound member function expression
这是我的代码:
.cpp文件
hThread = (HANDLE)_beginthreadex( NULL, 0, &Udp_Thread, NULL, 0, &threadID ); // Function caller in main()
unsigned __stdcall CUdpSocket::Udp_Thread(void *arguments)
{
...
}
.h文件
public:
unsigned __stdcall Udp_Thread(void *arguments);
我完全像MSDN那样关注,但它在我的程序中不起作用。我该怎么办?
谢谢。
答案 0 :(得分:3)
C2276:编译器发现创建指向成员的指针的语法有问题。
您需要指定类范围。
另外_beginthreadex
采用函数指针而不是成员函数指针。因此,您必须传递静态函数的地址。
使用这个:
classs CUdpSocket
{
public:
unsigned static __stdcall Udp_Thread(void *arguments);
}
// Function caller in main()
hThread = (HANDLE)_beginthreadex( NULL, 0, &CUdpSocket::Udp_Thread, NULL, 0, &threadID );
答案 1 :(得分:2)
看起来Udp_Thread是一个类的成员。在这种情况下,它必须是静态的,否则函数的原型不是_beginthreadex所期望的,因为它有一个额外的隐含成员,它是指针。