注册 登录
编程论坛 VC++/MFC

MFC 结束一个线程

Fungigv 发布于 2014-10-05 20:46, 947 次点击
我用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))
该如何修改才能顺利结束?
4 回复
#2
天使梦魔2014-10-06 09:26
ThreadProcRecv值是你自己写的,它用于退出后捕捉代码,类似于exit()函数,第二个参数是否从内存撤销.
你可以用它的另一个重载,退出码为0.
AfxEndThread(0);

另外,为什么不让线程自己返回,return线程函数后就等于退出了,如果线程有消息循环就等待状态,如果没有就在线程函数最后面的括号里return
#3
Fungigv2014-10-06 20:01
我试了一下,它结束了,但出现了一个错误
只有本站会员才能查看附件,请 登录
#4
天使梦魔2014-10-06 20:17
程序不是你写的?
堆被破坏的原因有很多,假如是释放线程后造成的话,说明线程内数据有问题
该问题可能来自:
动态内存没有释放
线程非正规结束(指内部数据未处理完成)
内存越界(比如数组和其它)
主线程强制引用了指向该内存的模块.


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


不过小心,2B才这样,小心控制内存,不然只有等程序奔溃后系统回收内存.
#5
Fungigv2014-10-06 20:41
谢谢,可能是别的地方出了差错
1