我正在为本地网络编写一个简单的点对点即时通讯工具。它使用ini文件来解析UUID,以用作整个网络的标识符。可以通过QSettings对象访问ini文件。我编写了一些功能,可以在同一台计算机上运行多个程序实例。当第一个程序运行时,它会读取第一个条目的ini文件,如果存在,则读取它,并用" INUSE"替换它。关闭时,它将使用原始UUID替换键值。如果程序的另一个实例读取ini文件并读取INUSE作为第一个键值,则在它之后创建另一个实例,接收它,并在第二个键值上放置一个INUSE标记。
但是,如果程序崩溃了" INUSE"将丢失,INUSE将保留,直到手动取出。如何解决使用完成同样事情的系统崩溃的问题?
我看过QLockFile,但不能完全理解我将如何实现这样一个系统。
感谢任何评论。
ini文件的当前格式如下:
[uuid]
1={uuid1}
2={uuid2}
程序1执行时
[uuid]
1=INUSE
2={uuid2}
正常程序结束后
[uuid]
1={uuid1}
2={uuid2}
基本上我需要的是一种在程序执行之间保留数据的方法,但也向其他表示当前正在使用数据的实例发出信号。
答案 0 :(得分:0)
我认为首先要确定你的程序崩溃的原因。为了选择更好的解决方案。
QLockFile允许您阻止多个进程访问同一文件。因此,如果程序崩溃,这只对您有用。
你的程序崩溃的原因是什么,我建议在发生这种情况时使用异常来执行正确的操作:
try {
// Some of your code
} catch (exception &e)
{
// Some error occured, do something about it.
// Like restoring your UUID.
}
您可以阅读有关例外here的更多信息,并且始终可以使用QT版本Qexception。
希望有所帮助