其他分享
首页 > 其他分享> > c – 创建线程不接受成员函数

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