大体是这样的:在头文件的类外添加线程函数声明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 *)'
3 回答
繁星点点滴滴
TA贡献1803条经验 获得超3个赞
你可以参考下。
你要是调用 CreateThread 函数的话,那么线程过程函数不是随便定义的。他要求一个标准的返回值
DWORD WINAPI ThreadFun(LPVOID para);
参数名和函数名你可以随意,其他不要变。
你编译器中返回的错误也说了,CreateThread的第三个参数的返回值不能是void,必须是一个 'unsigned long (__stdcall *) 并且参数是(void *) 的函数地址值。
看到这个错误提示后,你就应该照着提示区改就可以了。将你的函数声明按照提示更改就一切ok了。
DWORD WINAPI 就是 unsigned long (__stdcall *) 的一个宏。
泛舟湖上清波郎朗
TA贡献1818条经验 获得超3个赞
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。
添加回答
举报
0/150
提交
取消