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

时间:2011-08-26 17:13:02

标签: c++ qt qt4 pyqt

我正在使用Qsettings for non gui产品将其设置存储到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(..)。如果上述设计有任何问题,请指出问题。

3 个答案:

答案 0 :(得分:1)

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

之前拨打sleep(20)电话

答案 1 :(得分:0)

也许你必须在delete settings;之后sync()确保它没有打开,然后在另一个过程中进行写作?

答案 2 :(得分:0)

这会编译吗?您正在使用什么XmlFormat实现以及哪个操作系统?你的项目中必须有一些特殊的代码用于存储/读取Xml - 这段代码中必须有一些与你期望的不同的东西。