在VS2010环境下VC++怎么创建子线程

hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)SmThread,(LPVOID)this,0,NULL);为什么... hThread = CreateThread(NULL,0, (LPTHREAD_START_ROUTINE)SmThread,(LPVOID)this,0,NULL);为什么总提示错误 1 error C2664: “CreateThread”: 不能将参数 3 从“DWORD (__stdcall *)(LPVOID)”转换为“LPTHREAD_START_ROUTINE” 感觉没有错啊,请高手指点一下
没人遇到过这种情况吗?急救啊~
展开
 我来答
空雪梦见
2013-07-22 · TA获得超过5598个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1206万
展开全部
虽然我也觉得没有错,……那两个类型怎么看都一样的啊
你要不要在 SmThread 前面加一个 & 符号看看?像这样
hThread = CreateThread(NULL,0, (LPTHREAD_START_ROUTINE)&SmThread,(LPVOID)this,0,NULL);
不要问我为什么因为我也不知道,我只是觉得如果这样做的话有可能就可以编译通过了,“可能”

或者把强制转换关掉,
hThread = CreateThread(NULL,0, SmThread,(LPVOID)this,0,NULL);

另:如果你用的是c++,然后SmThread是一个成员函数,并且还不是静态成员函数的话,那么编译不过去是正常的:因为不可以把非静态成员函数给送进去的

补充一个:看了你下面的追问,
CreateThread”: 不能将参数 3 从“DWORD (__stdcall *)(void)”转换为“LPTHREAD_START_ROUTINE
那啥,为什么是 void,LPVOID是void*不是void啊……注意星号
凭康适Bc
2013-07-21 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:142
采纳率:0%
帮助的人:115万
展开全部
请如下定义函数
DWORD WINAPI SmThread ( LPVOID lpParam ){}
追问
我是这样定义的,可是还有错,为什么啊 痛苦!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
secondjay001
2015-10-09 · 超过51用户采纳过TA的回答
知道答主
回答量:108
采纳率:0%
帮助的人:80.8万
展开全部
1、CreateThread
2、beginthread
3、beginthreadex
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Magic_旭
2013-07-21 · 超过41用户采纳过TA的回答
知道答主
回答量:287
采纳率:100%
帮助的人:120万
展开全部
你搜索一下MSDN文档,把线程的函数声明复制过来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiao_yuan2012
2013-07-20 · 超过44用户采纳过TA的回答
知道答主
回答量:276
采纳率:0%
帮助的人:120万
展开全部
第三个参数直接传 SmThread 就可以,不用转换
更多追问追答
追问
直接传SmThread,也不行 不知道为什么
追答
什么提示
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式