在C中,如果我的应用程序意外结束,我可以在此之前调用函数吗? 我正在向数据库(processRunning = 1)写入一个标志,以防止其他应用程序启动类似的进程。 当应用程序结束时,它不会改变该标志。
查看C标准库的atexit
API。
在POSIX上,正确的解决方案是使用共享内存中的强大互斥锁来保护数据。 如果您的进程因强大的互斥锁而死亡,另一个试图锁定互斥锁的程序将不会死锁,而是返回EOWNERDEAD
,然后它有机会清除受互斥锁保护的状态并调用pthread_mutex_consistent
。
编辑:如果你只想阻止程序的多个实例运行,肯定有更好/更简单的方法,比如对数据库文件进行锁定。
如果您的应用程序正常终止,它将运行通过atexit
注册的function。 这是一个标准函数,可在Windows , unix和其他所有平台上以及C ++中使用 。
请注意,“正常终止”表示通过调用exit()
或从main()
返回。 如果您的应用程序通过abort()
或_exit()
终止,或者它是从外部立即终止的,则可能没有机会进行任何清理。 可能有一种更好的方法,可能在包装器程序中设置和清除标志,无论程序如何终止,或者完全取消该标志,它都会进行清理。
有更好的方法可以阻止应用程序运行两次。 一种解决方案是使用系统范围的命名互斥锁 。 另一个也许更简单的解决方案是锁定文件 (打开以进行写入)。 即使应用程序崩溃资源被操作系统释放,您也可以再次启动应用程序,因为文件或互斥锁将不再被锁定。
以上就是c/c++开发分享C:程序退出时做某事相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/562083.html