发生崩溃时需要更新的 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控件丢失(没有任何错误)

发生 qt5 错误 Poppler::Document* 文档

打开exe文件时qt5widgetsd.dll丢失怎么办

ODBC 数据源管理器崩溃