| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 943 人关注过本帖
标题:MFC 结束一个线程
只看楼主 加入收藏
Fungigv
Rank: 2
等 级:论坛游民
帖 子:13
专家分:25
注 册:2014-9-21
结帖率:100%
收藏
 问题点数:0 回复次数:4 
MFC 结束一个线程
我用AfxBeginThread创建了一个工作者线程,想通过AfxEndThread来结束。编译结果:
1>d:\2008projects\pfltalk\pfltalkdlg.cpp(365) : error C2664: “AfxEndThread”: 不能将参数 1 从“UINT (__cdecl *)(LPVOID)”转换为“UINT”                                                                          
1>        没有使该转换得以执行的上下文
源码:AfxEndThread(ThreadProcRecv, 0);
(UINT ThreadProcRecv(LPVOID pParam))
该如何修改才能顺利结束?
搜索更多相关主题的帖子: 上下文 工作者 如何 
2014-10-05 20:46
天使梦魔
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:0 
ThreadProcRecv值是你自己写的,它用于退出后捕捉代码,类似于exit()函数,第二个参数是否从内存撤销.
你可以用它的另一个重载,退出码为0.
AfxEndThread(0);

另外,为什么不让线程自己返回,return线程函数后就等于退出了,如果线程有消息循环就等待状态,如果没有就在线程函数最后面的括号里return
2014-10-06 09:26
Fungigv
Rank: 2
等 级:论坛游民
帖 子:13
专家分:25
注 册:2014-9-21
收藏
得分:0 
我试了一下,它结束了,但出现了一个错误
图片附件: 游客没有浏览图片的权限,请 登录注册

中华人民共和国万岁!  世界人民大团结万岁!
2014-10-06 20:01
天使梦魔
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:0 
程序不是你写的?
堆被破坏的原因有很多,假如是释放线程后造成的话,说明线程内数据有问题
该问题可能来自:
动态内存没有释放
线程非正规结束(指内部数据未处理完成)
内存越界(比如数组和其它)
主线程强制引用了指向该内存的模块.


你可以试着这样:
AfxEndThread(0,flase);//第二个参数不让线程占用的内存释放
或者注意一下你的ThreadProcRecv值,它是否需要返回一个代码用于跟踪(不过一般不需要)


不过小心,2B才这样,小心控制内存,不然只有等程序奔溃后系统回收内存.
2014-10-06 20:17
Fungigv
Rank: 2
等 级:论坛游民
帖 子:13
专家分:25
注 册:2014-9-21
收藏
得分:0 
谢谢,可能是别的地方出了差错

中华人民共和国万岁!  世界人民大团结万岁!
2014-10-06 20:41
快速回复:MFC 结束一个线程
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017957 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved