gpt4 book ai didi

c++ - QSettings - 两个进程之间的同步问题

转载 作者:行者123 更新时间:2023-11-28 08:17:32 25 4
gpt4 key购买 nike

我正在使用非图形用户界面产品的 Qsettings 将其设置存储到 xml 文件中。这是作为一个库编写的,可在 C、C++ 程序中使用。每个产品将有 1 个 xml 文件。每个产品可能有多个子产品,它们按子产品分组写入xml如下 -

文件:“product1.xml”

<product1>
<subproduct1>
<settings1>..</settings1>
....
<settingsn>..</settingsn>
</subproduct1>
...
<subproductn>
<settings1>..</settings1>
....
<settingsn>..</settingsn>
</subproductn>

</product1>

文件:productn.xml

<productn>
<subproduct1>
<settings1>..</settings1>
....
<settingsn>..</settingsn>
</subproduct1>
...
<subproductn>
<settings1>..</settings1>
....
<settingsn>..</settingsn>
</subproductn>

</productn>

一个进程中的代码执行以下操作 -

settings = new QSettings("product1.xml", XmlFormat);
settings.setValue("settings1",<value>)
sleep(20);
settings.setValue("settings2", <value2>)
settings.sync();

当第一个进程进入休眠状态时,我启动另一个执行以下操作的进程 -

settings = new QSettings("product1.xml", XmlFormat);
settings.remove("settings1")
settings.setValue("settings3", <value3>)
settings.sync();

我希望 settings1 从 product1.xml 文件中消失,但在上述两个过程结束时它仍然存在于文件 - product1.xml 中。我没有在我的设置库中使用 QCoreApplication(..)。以上设计如有错误请指出问题。

最佳答案

您正在做的事情有点奇怪,但需要注意的是 sync() 调用实际上是将文件写入磁盘。在这种情况下,如果您希望您的第二个进程实际看到您所做的更改,那么您需要在第二个进程访问该文件之前调用 sync() 以保证它会实际上看到你的修改。因此,我会尝试在 sleep(20)

之前调用 settings.sync()

关于c++ - QSettings - 两个进程之间的同步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7208253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com