请问线程内部自己退出的办法。

moren123 2009-08-14 11:51:38
我在线程函数(里面调用了很多个函数)用了AfxEndThread,发现退出时老是有读取空指针的错误,请问除了这个函数之外,还有没有其他函数? MS建议不要使用TerminateThread的。
...全文
117 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
moren123 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pady_pady 的回复:]
读空指针错误那是你程序的问题,和线程有什么关系呢?如果要处理跨线程指针,是一定要判断有效性的。难道你认为强制关闭线程就可以防止指针错误了?
[/Quote]
我也不想强制啊,只是发现用了AfxEndThread的时候就会有内存错误而已。
moren123 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 skyxie 的回复:]
线程函数中 return, 线程就自然结束了.
[/Quote]
我的函数里面嵌套了很多层,不能简单的return啊。
cxmbaby 2009-08-14
  • 打赏
  • 举报
回复
TerminateThread只是不能释放自身资源吧?使用TerminateThread之后再手动释放其它资源,最后加上delete this就行了
pady_pady 2009-08-14
  • 打赏
  • 举报
回复
读空指针错误那是你程序的问题,和线程有什么关系呢?如果要处理跨线程指针,是一定要判断有效性的。难道你认为强制关闭线程就可以防止指针错误了?
zoulie 2009-08-14
  • 打赏
  • 举报
回复
ExitThread
skyxie 2009-08-14
  • 打赏
  • 举报
回复
线程函数中 return, 线程就自然结束了.
moren123 2009-08-14
  • 打赏
  • 举报
回复
我现在是用AfxBeginThread(线程函数);

然后在线程函数内部自动退出线程时采用afxEndThread。
河马爸爸 2009-08-14
  • 打赏
  • 举报
回复
最好是自己写一个while在最外层,然后检测到系统发过来的信号就退出。
比如设置一个全局变量 BOOL bIsRunning;
然后在线程内部使用 while(bIsRunning){ ....... };
当你在程序外将bIsRunning置为false的时候这个线程就自动退出了。
moren123 2009-08-14
  • 打赏
  • 举报
回复
还是不大明白上面几位大哥的回答:

例如我的的线程
A()
{
....
return;
}
B()
{
....
}
while(true)
{
A();
B();
C();
if(XX)
{
break;
}
}
程序是开源的,我拿过来而已,这样类似的结果。你在A中return又有什么用呢? 还不是不能结束到线程。
如果在线程循环里面return当然是可以结束。关键是我代码里面A(打个比方)里面可能还嵌套了几个函数。所以最底层的函数return;了,线程还是继续走。
就是在最底层函数出错时,我想退出线程而已。
见习学术士 2009-08-14
  • 打赏
  • 举报
回复
_beginthreadex

_endthreadex
skybblue 2009-08-14
  • 打赏
  • 举报
回复
return是最简单有效的方法,不论你线程中嵌套了多少层,可以根据线程条件结束的,既然你都可以EndTread了,又有什么不可以直接return退出呢.
das_jack 2009-08-14
  • 打赏
  • 举报
回复
1 程序结构有问题
2 对退出"条件"的检测
GMingZ 2009-08-14
  • 打赏
  • 举报
回复
奇怪,你线程执行到末尾了不就自动结束了?你要是想在中途结束,完全可以就简单的return的。只是,不论
你在哪return,都要记得释放掉 已经 分配了 的资源

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧