发生崩溃时需要更新的 Qt5 ini 文件
Posted
技术标签:
【中文标题】发生崩溃时需要更新的 Qt5 ini 文件【英文标题】:Qt5 ini file that needs updating in case of a crash 【发布时间】:2016-10-31 17:20:54 【问题描述】:我正在为本地网络编写一个简单的点对点即时通讯工具。它使用 ini 文件来解析 UUID 以用作跨网络的标识符。通过 QSettings 对象访问 ini 文件。我已经编写了使程序的多个实例能够在同一台计算机上运行的功能。当第一个程序运行时,它会读取第一个条目的 ini 文件,如果存在则读取它,并将其替换为“INUSE”。关闭时,它将键值替换为原始 UUID。如果程序的另一个实例读取 ini 文件并读取一个 INUSE 作为第一个键值,它会在它之后创建另一个,获取它,并将 INUSE 标记放在第二个键值上。
这可以正常工作,但是,如果程序崩溃,“INUSE”的 UUID 将丢失,INUSE 将一直保留,直到手动取出。我该如何解释完成相同任务的系统崩溃的原因?
我已经查看了 QLockFile,但无法完全理解我将如何实现这样的系统。
感谢任何cmets。
当前ini文件格式如下:
[uuid]
1=uuid1
2=uuid2
程序 1 正在执行时
[uuid]
1=INUSE
2=uuid2
程序正常结束后
[uuid]
1=uuid1
2=uuid2
本质上,我需要的是一种在程序执行之间保存数据的方法,同时也向其他实例发出信号,表明当前正在使用所述数据。
【问题讨论】:
【参考方案1】:我认为首先要确定程序崩溃的原因。为了选择更好的解决方案。
QLockFile 允许您防止多个进程访问同一个文件。因此,只有当程序因此而崩溃时,这才会对您有用。
您的程序崩溃的原因是什么,我建议在发生这种情况时使用异常来执行正确的操作:
try
// Some of your code
catch (exception &e)
// Some error occured, do something about it.
// Like restoring your UUID.
您可以阅读有关异常here 的更多信息,并且您始终可以使用QT 版本Qexception。
希望对你有帮助
【讨论】:
感谢您的评论。该程序在我目前知道的任何时候都不会崩溃,但是,如果它曾经在 unix 上发送过 SIGKILL 消息或在 Windows 上的等效消息,则会出现我原始帖子中的情况 @cbpeckles 那么你的问题是 IMO 措辞不好。如果你不修复它,我认为你不会得到你想要的答案。以上是关于发生崩溃时需要更新的 Qt5 ini 文件的主要内容,如果未能解决你的问题,请参考以下文章
AWS Elastic BeanStalk php.ini 文件更新
从PHP运行脚本时,RPi GPIO控件丢失(没有任何错误)