【问题标题】:QSettings - Sync issue between two processQSettings - 两个进程之间的同步问题
【发布时间】:2011-11-04 17:08:18
【问题描述】:

我正在使用非 gui 产品的 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(..)。以上设计如有问题请指出问题。

【问题讨论】:

  • “settings3”行是否执行?
  • 只是好奇,您是否自己为 QSettings 编写了 XML 解析器?我正在寻找一个适用于数组的工作版本。

标签: c++ qt qt4 pyqt


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我正在注册我的自定义 xmlreader 和 xmlwriter 来处理 xml 内容。 const QSettings::Format XmlFormat = QSettings::registerFormat("xml", readXmlFile, writeXmlFile);
      • 您的问题可能来自于您打开文件的方式以及 Chris 提到的问题。检查 xmlReader/Writer 的代码以了解打开文件的方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      相关资源
      最近更新 更多