子线程里exit(0)只是结束某个子线程还是整个应用程序!

csjcrystal 2008-01-25 04:21:18
在线程里调用exit(0)只是结束这个线程,还是结束应用程序??
如果exit(0)只是结束线程,那用什么方法在子线程里强制结束整个应用程序?
...全文
3425 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
WizardK 2010-02-25
  • 打赏
  • 举报
回复
引用 21 楼 wizardk 的回复:
Terminate the calling process after cleanup (exit) or immediately (_exit).

exit和return的效果相同。


忘了看标题了。。。在子线程里的效果不一样的
WizardK 2010-02-25
  • 打赏
  • 举报
回复
Terminate the calling process after cleanup (exit) or immediately (_exit).

exit和return的效果相同。
ttzyanswer 2010-02-25
  • 打赏
  • 举报
回复
引用 7 楼 msn123321 的回复:
exit(0)是在出错时结束当前进程
结束线程是调用endthread等函数来实现的
不过一般不用EXIT,因为他没有返回值,操作系统无法知道改进程的执行情况


呵呵.不要太相信书. 不要太小看OS...
tanxs001 2010-01-25
  • 打赏
  • 举报
回复

提前做好内存泄露处理等等,然后
ExitProcess(15);

全部退出!
好像是!记不清,ls可以一试!
IcyPlayer 2010-01-25
  • 打赏
  • 举报
回复
不过不推荐使用exit,一般要退出程序,可以考虑用PostQuitMessage(),相当于按下了窗口的X按钮,剩下的事情就交给程序自己吧
IcyPlayer 2010-01-25
  • 打赏
  • 举报
回复 1
来看看crt0dat.c里面的定义
exit()调用了doexit()
doexit()又调用了__crtCorExitProcess()
__crtCorExitProcess()实现如下
void __cdecl __crtCorExitProcess (
int status
)
{
HMODULE hmod;
PFN_EXIT_PROCESS pfn;

hmod = GetModuleHandle("mscoree.dll");
if (hmod != NULL) {
pfn = (PFN_EXIT_PROCESS)GetProcAddress(hmod, "CorExitProcess");
if (pfn != NULL) {
pfn(status);
}
}
//省略部分代码
}


所以,最终调用的是CorExitProcess这个包含在mscoree.dll的API,是结束进程

maxlcl 2010-01-25
  • 打赏
  • 举报
回复
我就是先google,再baidu,然后就到这里来了
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
有问题请先GOOGLE,BAIDU
qq271991628 2008-04-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhujunzhujun 的回复:]
exit是结束当前的进程,但是这样做的话,很多后期的处理就没有机会做了,要考虑这一点哦。

一般情况下,在线程里结束进程也不是个好办法,原因跟上面差不多(线程最安全的退出方法是自己退出)。
你可以发一个自定义的消息给主线程(一个窗口消息就可以),让主线程发一个消息给当前的线程让他自己退出,在主线程里用waitforsinleobject等待子线程结束后,主线程再退出。
[/Quote]
anuoa 2008-04-04
  • 打赏
  • 举报
回复
结束当前进程,这个我经常用到
skyful123 2008-04-03
  • 打赏
  • 举报
回复
最好的办法是 出错后就send一个消息 然后线程返回 主程序通过消息来提示错误并结束~
  • 打赏
  • 举报
回复
结束整个应用程序的。
exit 好像不会带来内存和资源泄露问题。它会调用ExitProcess的
具体你可以看看MSDN中的帮助
zhujunzhujun 2008-01-29
  • 打赏
  • 举报
回复
exit是结束当前的进程,但是这样做的话,很多后期的处理就没有机会做了,要考虑这一点哦。

一般情况下,在线程里结束进程也不是个好办法,原因跟上面差不多(线程最安全的退出方法是自己退出)。
你可以发一个自定义的消息给主线程(一个窗口消息就可以),让主线程发一个消息给当前的线程让他自己退出,在主线程里用waitforsinleobject等待子线程结束后,主线程再退出。
Rain7758 2008-01-29
  • 打赏
  • 举报
回复
最好通过消息或者事件通知主线程退出,掉 exit 是可以最初进程,但是析构函数得不到执行!!!
可能因此带来严重后果~~
abomber2 2008-01-29
  • 打赏
  • 举报
回复
结束整个进程
V若只如初见 2008-01-26
  • 打赏
  • 举报
回复
exit(0)是在出错时结束当前进程
结束线程是调用endthread等函数来实现的
不过一般不用EXIT,因为他没有返回值,操作系统无法知道改进程的执行情况
jsjl2008 2008-01-26
  • 打赏
  • 举报
回复
exit不是好办法,内存和资源泄露问题可能存在的
cnzdgs 2008-01-25
  • 打赏
  • 举报
回复
一般用ExitProcess
cnzdgs 2008-01-25
  • 打赏
  • 举报
回复
退出进程,VC编程似乎很少被用到。
z_kris 2008-01-25
  • 打赏
  • 举报
回复
结束整个应用程序
子线程要结束的话 return线程函数或者terminatethread就行了
加载更多回复(2)

15,473

社区成员

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

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