我刚才查错的时候把强制类型转换去掉了,还是类似的错误。该怎么办?

大体是这样的:
在头文件的类外添加线程函数声明void ThreadFunc();
在类内部添加protected型变量: HANDLE hThread;DWORD ThreadID;
编写线程函数
在主函数中创建该线程hThread=CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)ThreadFunction,
NULL,
0,
&ThreadID);

问题就是创建线程时出错,cannot convert parameter 3 from 'void (void)' to 'unsigned long (__stdcall *)(void *)'
错误的位置就在创建线程里的(LPTHREAD_START_ROUTINE)ThreadFunction上,还问高手这怎么回事啊????
错误提示是'type cast' : cannot convert from '' to 'unsigned long (__stdcall *)(void *)'

HUX布斯
浏览 93回答 3
3回答

繁星点点滴滴

你可以参考下。你要是调用 CreateThread 函数的话,那么线程过程函数不是随便定义的。他要求一个标准的返回值DWORD WINAPI ThreadFun(LPVOID para);参数名和函数名你可以随意,其他不要变。你编译器中返回的错误也说了,CreateThread的第三个参数的返回值不能是void,必须是一个 'unsigned long (__stdcall *) 并且参数是(void *) 的函数地址值。看到这个错误提示后,你就应该照着提示区改就可以了。将你的函数声明按照提示更改就一切ok了。DWORD WINAPI 就是 unsigned long (__stdcall *) 的一个宏。

泛舟湖上清波郎朗

DWORD WINAPI ThreadFunction( LPVOID p ){MessageBoxA( NULL, "", "这是子线程", 0 );}...HANDLE hThread = CreateThread( NULL, 0, ThreadFunction, NULL,NULL, NULL );CloseHandle( hThread );你的基础还很薄弱,先从最基本的C、C++的语言本身学起。等掌握了C或者C++,再来学习Windows API。

扬帆大鱼

将强制类型转换去掉就是了。这里参数传递的是线程的首地址。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java