C语言中exit();怎么用?exit() 结束当前进程/当前程序/,在整个程序中,只要调用 exit ,就结束 。
return() 是当前函数返回 , 当然如果是在主函数main, 自然也就结束当前进程了,如果不是 , 那就是退回上一层调用 。
在多个进程时.如果有时要检测上进程是否正常退出的.就要用到上个进程的返回值 。
exit(1)表示进程正常退出. 返回 1;
exit(0)表示进程非正常退出. 返回 0.
操作:
1、进程的开始:
C程序是从main函数开始执行, 原型如下:int main(int argc, char *argv[]),通常main的返回值是int型, 正确返回0.如果main的返回值为void或者无, 某些编译器会给出警告, 此时main的返回值通常是0.
2、进程终止:
C程序的终止分为两种: 正常终止和异常终止.正常终止分为: return, exit, _exit, _Exit, pthreade_exit异常中指分为: abort, SIGNAL, 线程响应取消 。正常终止的前4种, 即exit系列函数.
3、 atexit终止处理程序:
ISO C规定, 一个进程最对可登记32个终止处理函数, 这些函数由exit按登记相反的顺序自动调用. 如果同一函数登记多次, 也会被调用多次.
原型如下:
#include
int atexit(void (*func)(void));
其中参数是一个函数指针, 指向终止处理函数, 该函数无参无返回值.
扩展资料
exit函数和return函数的主要区别:
1)exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的 。main函数结束时也会隐式地调用exit函数 。
exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件 。
exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程;而return是返回函数值并退出函数 。
通常情况:exit(0)表示程序正常, exit(1)和exit(-1)表示程序异常退出,exit(2)表示表示系统找不到指定的文件 。在整个程序中,只要调用exit就结束(当前进程或者在main时候为整个程序) 。
2)return是语言级别的,它表示了调用堆栈的返回;return( )是当前函数返回,当然如果是在主函数main, 自然也就结束当前进程了,如果不是 , 那就是退回上一层调用 。
在多个进程时 。如果有时要检测上个进程是否正常退出 。就要用到上个进程的返回值,依次类推 。而exit是系统调用级别的,它表示了一个进程的结束 。
3)exit函数是退出应用程序,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息 。
C语言线程如何终止?有三种方式可以终止线程 , 具体调用函数依赖于使用的线程系统 。
1 在线程入口函数中,调用return 。即退出线程入口函数,可以实现终止当前线程效果;
2 在线程执行的任意函数,调用当前线程退出函数,可以退出当前线程;
3 在任意位置,调用线程终止函数,并传入要终止线程的标识符,即pid,可以实现终止对应线程效果 。
C语言如何终止线程?调用ExitThread函数 。
该函数将终止线程的运行,并导致操作系统清除该线程使用的所有操作系统资源 。但是,C资源(如C类对象)将不被撤消 。
(3)调用TerminateThread函数 。
TerminateThread 能撤消任何线程 。线程的内核对象的使用计数也被递减 。TerminateThread函数是异步运行的函数 。如果要确切地知道该线程已经终止运行,必须调用WaitForSingleObject或者类似的函数 。当使用返回或调用ExitThread的方法撤消线程时,该线程的内存堆栈也被撤消 。但是,如果使用TerminateThread,那么在拥有线程的进程终止运行之前,系统不撤消该线程的堆栈 。
C语言如何让结束指定进程中的指定线程终止线程有三种方法:
1.线程可以在自身内部调用AfxEndThread()来终止自身的运行
2.可以在线程的外部调用BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode )来强行终止一个线程的运行,
然后调用CloseHandle()函数释放线程所占用的堆栈
3.第三种方法是改变全局变量,使线程的执行函数返回 , 则该线程终止 。
unsigned long __cdecl _beginthread (void (__cdecl *) (void *),
unsigned, void *);PS--这是我复制的别人的
C语言如何终止线程有三种方式可以终止线程,具体调用函数依赖于使用的线程系统 。
1 在线程入口函数中,调用return 。即退出线程入口函数 , 可以实现终止当前线程效果;
2 在线程执行的任意函数,调用当前线程退出函数,可以退出当前线程;
3 在任意位置 , 调用线程终止函数,并传入要终止线程的标识符,即pid , 可以实现终止对应线程效果 。
c关闭线程函数退出线程可以有四种方法:
1.线程函数的return返回(最好这样):
其中用线程函数的return返回, 而终止线程是最安全的, 在线程函数return返回后, 会清理函数内申请的类对象, 即调用这些对象的析构函数. 然后会自动调用 _endthreadex()函数来清理 _beginthreadex(...)函数申请的资源(主要是创建的tiddata对象).
2.调用 _endthreadex()函数 或 ExitThread()函数(最好不要):
如果使用这两种方法退出线程, 则不会执行线程函数的return语句, 所以就不会调用线程函数作用域内申请的类对象的析构函数, 会造成内存泄露.
剩下两种是在程序设计中一定要避免的.
3.用同一个进程中的另一个线程调用 TerminateThread()函数(必须避免);
4.终止该线程所在的进程(绝对避免);
但是要说_endthreadex完全没有用肯定是不对的,_endthreadex并不是一个过时的函数,正确的使用并不会带来问题 。
比如在线程的主函数中,return是_endthreadex的一个良好替代,就像main函数里面return是exit()或ExitProccess()的良好替代一样,但是这不表示exit函数没用 。比如线程调用了一个子函数,如果子函数决定退出线程,return是没用的 , _endthreadex即可终结线程 。
但是这个设计不好,因为可能造成LZ提出的资源泄漏 。尤其考虑到后台线程终结后的资源泄漏比主线程的资源泄漏更要命(主线程退出后 , 进程就退出了,OS会清理一切资源,无所谓泄露不泄露,而子线程退出后主线程可能还会运行很久,并且可能有大量的同类型的子线程退出 , 会造成要命的泄露)
良好的设计还是返回线程的主函数,让threadproc来决定是不是要退出,从这个意义上说 , _endthreadex没有必要 。微软也指出,有些程序员就是要调用exit系列函数(ExitThread,ExitProccess等) , 没辙,只好提供了 。
【线程终止函数c语言 线程停止执行的方法】线程终止函数c语言的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于线程停止执行的方法、线程终止函数c语言的信息别忘了在本站进行查找喔 。
推荐阅读
- phpcms禁止删除表单信息的简单介绍
- 如何在word下画点,word怎样画点
- 怎么让显卡风扇一直转,显卡风扇平时不转的吗
- 关于vb.net添加监视的信息
- 硬盘插头怎么安装,硬盘插头怎么安装图解
- mysql5.6.24原码安装,mysql源码安装和二进制安装
- excel锁密码忘记怎么办,excel密码忘记怎么解锁
- linux命令行界面放大 linux命令行界面放大字体
- linux系统监视命令,linux实时监控命令