如何在MFC中使用_beginthreadex

时间:2011-03-18 06:46:47

标签: c++ mfc

我想使用_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那样关注,但它在我的程序中不起作用。我该怎么办?

谢谢。

2 个答案:

答案 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所期望的,因为它有一个额外的隐含成员,它是指针。