创建线程时报错,高手来帮忙解决下。。。

我从网上找了教创建线程的方法,大体是这样的:在头文件的类外添加线程函数声明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 *)'

我刚才查错的时候把强制类型转换去掉了,还是类似的错误。。。
展开
 我来答
cknight123
2009-12-07 · TA获得超过964个赞
知道小有建树答主
回答量:532
采纳率:0%
帮助的人:589万
展开全部
1楼已经给出答案了,你可以参考下。
你要是调用 CreateThread 函数的话,那么线程过程函数不是随便定义的。他要求一个标准的返回值

DWORD WINAPI ThreadFun(LPVOID para);
参数名和函数名你可以随意,其他不要变。

你编译器中返回的错误也说了,CreateThread的第三个参数的返回值不能是void,必须是一个 'unsigned long (__stdcall *) 并且参数是(void *) 的函数地址值。

看到这个错误提示后,你就应该照着提示区改就可以了。将你的函数声明按照提示更改就一切ok了。

DWORD WINAPI 就是 unsigned long (__stdcall *) 的一个宏。
百度网友c6c78e9
2009-12-06 · TA获得超过2283个赞
知道小有建树答主
回答量:620
采纳率:0%
帮助的人:991万
展开全部
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。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yangruihan123
2009-12-06 · TA获得超过314个赞
知道答主
回答量:355
采纳率:0%
帮助的人:244万
展开全部
将强制类型转换去掉就是了。这里参数传递的是线程的首地址,你可以查考MSDN。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式