我可以将方法转换为 LPTHREAD_START_ROUTINE 吗?
Can I convert a method to LPTHREAD_START_ROUTINE?
我已经声明了一个函数并作为 CreateThread() 函数的第 3 个参数传递,但我试图将此函数和相关的 class 分开,以使代码更有条理,但我收到以下错误:
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* 的函数。使用它作为参数并将其转换回函数
我已经声明了一个函数并作为 CreateThread() 函数的第 3 个参数传递,但我试图将此函数和相关的 class 分开,以使代码更有条理,但我收到以下错误:
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* 的函数。使用它作为参数并将其转换回函数