c – 创建线程不接受成员函数
作者:互联网
我正在尝试为网络编程创建一个类.这将创建一个带有线程的通用套接字.
但是当我尝试使用createthread()创建线程时.第三个参数是产生错误.从网上我开始知道我不能使用成员函数作为createthread()的参数.
我能做到这一点吗?
解决方法:
处理此问题的最简单方法是创建一个“存根”函数,该函数将回调到您的类中.
UINT tid
HANDLE hThread = CreateThread(NULL, 0, myThreadStub, this, 0, &tid);
....
unsigned long WINAPI myThreadStub(void *ptr)
{
if (!ptr) return -1;
return ((MyClass*)ptr)->ThreadMain();
}
CreateThread()允许您将参数传递给线程函数(CreateThread()调用的参数4).您可以使用它来传递指向您的类的指针.然后,您可以将线程存根转换为指针返回正确的类型,然后调用成员函数.你甚至可以让“myThreadStub”成为“MyClass”的静态成员,允许它
访问私人会员和数据.
如果安装了boost,则可以使用boost :: bind来执行此操作而不创建存根函数.我从来没有在Windows上试过,所以我不能肯定它会起作用(因为回调函数必须是一个WINAPI调用)但如果它确实有效,它会看起来像:
HANDLE hThread = CreateThread(NULL, 0, boost::bind(&MyClass::ThreadFunction, this), NULL, 0, &tid);
其中thread函数是一个非静态成员函数,它接受一个void *参数.
标签:c,windows,callback,function-pointers 来源: https://codeday.me/bug/20191001/1838307.html