c++ - 我可以将方法转换为 LPTHREAD_START_ROUTINE 吗?

标签 c++ windows multithreading qt mingw

我已经声明了一个函数并作为 CreateThread() 函数的 3 个参数传递,但我试图将这个函数和相关的类分开,以使代码更有条理,但我收到以下错误:

error: cannot convert 'long unsigned int (MainWindow::)(void)' to 'LPTHREAD_START_ROUTINE {aka long unsigned int (attribute((stdcall)) )(void)}' for argument '3' to 'void* CreateThread(LPSECURITY_ATTRIBUTES, SIZE_T, LPTHREAD_START_ROUTINE, LPVOID, DWORD, LPDWORD)'

                                                               ^

我猜这是因为方法的每个第一个参数都是由编译器自动生成的隐藏参数,这是 this 指针被传递的地方,导致函数签名不匹配,对吧?

我有什么办法可以让它工作吗?

它确实发生在方法内部的调用中:

   hThread = CreateThread( NULL, 0, &func, NULL, 0, NULL);

最佳答案

创建一个接受 void* 的函数。使用它作为参数并将其转换回函数

关于c++ - 我可以将方法转换为 LPTHREAD_START_ROUTINE 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32672485/

相关文章:

linux - 如何使 Windows 成为开箱即用的 POSIX 兼容操作系统?

java - Perl 共享变量的原子性和可见性

Java:强制停止 ExecutorService 线程

c++ - 为什么 move 运算符不只是析构函数+ move 构造函数

c++ - 如何加快LUT查找的直方图?

windows - 允许计算机在从 Windows 应用程序播放音频时进入休眠状态

c# - 一个快速生产者多个慢速消费者的最佳方案是什么?

c++ - 在控制台中打印时如何将循环打印的形状移到文本上

c++ - 函数和多类层次结构

c++ - 原始 ICMP 套接字 : recvfrom() not recieving any data