创建线程时报错,高手来帮忙解决下。。。
我从网上找了教创建线程的方法,大体是这样的:在头文件的类外添加线程函数声明voidThreadFunc();在类内部添加protected型变量:HANDLEhThrea...
我从网上找了教创建线程的方法,大体是这样的:
在头文件的类外添加线程函数声明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 *)'
我刚才查错的时候把强制类型转换去掉了,还是类似的错误。。。 展开
在头文件的类外添加线程函数声明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个回答
展开全部
1楼已经给出答案了,你可以参考下。
你要是调用 CreateThread 函数的话,那么线程过程函数不是随便定义的。他要求一个标准的返回值
DWORD WINAPI ThreadFun(LPVOID para);
参数名和函数名你可以随意,其他不要变。
你编译器中返回的错误也说了,CreateThread的第三个参数的返回值不能是void,必须是一个 'unsigned long (__stdcall *) 并且参数是(void *) 的函数地址值。
看到这个错误提示后,你就应该照着提示区改就可以了。将你的函数声明按照提示更改就一切ok了。
DWORD WINAPI 就是 unsigned long (__stdcall *) 的一个宏。
你要是调用 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。
{
MessageBoxA( NULL, "", "这是子线程", 0 );
}
...
HANDLE hThread = CreateThread( NULL, 0, ThreadFunction, NULL,
NULL, NULL );
CloseHandle( hThread );
你的基础还很薄弱,先从最基本的C、C++的语言本身学起。等掌握了C或者C++,再来学习Windows API。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将强制类型转换去掉就是了。这里参数传递的是线程的首地址,你可以查考MSDN。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询