读/写文件导致错误。 (javaScript和C ++)

时间:2014-01-31 10:39:47

标签: javascript c++ xml runtime-error

我有一段可以工作的javaScript(和html一起)来为用C ++编写的程序生成GUI。该程序必须运行很长时间(有时14/15天,没有监控)。

C ++和javaScript通过写入/读取XML文件进行通信。

一次运行程序超过24小时后,我注意到偶尔会出现javaScript错误'someArray [...]。name'为null或不是对象。

现在:这些都是充满了从XML文件中获取的信息的数组,由C ++编写。每隔几秒刷新一次这些数组的内容(更新GUI“live”中的信息)。

问题是:这些错误是否可能由访问/计时器问题引起,如 - > javaScript开始从XML中读取一行,就像C ++进入并重写该行一样。因此,信息被解析为javaScript数组中的一些非法字符(等),当访问时会抛出错误?

希望一切都有道理。感谢。

1 个答案:

答案 0 :(得分:1)

您的建议似乎为正在发生的事情提供了合理的解释。 您可能会看到race condition

要修复它,您可以在C ++和JS之间实现同步机制。 我能想到的最简单的同步形式是每次C ++写入主XML文件时创建第二个文件(此文件用作锁)。 JS在读取XML之前等待锁定文件消失。在C ++方面也是如此。

示例代码:

<强> C ++

while(programRunning) {
    do stuff;
    // Now it's time to write XML
    while("lockCpp.txt" exists)
        ;  // Do nothing, JS is reading
    create file "lockJS.txt";
    write to xml;
    delete file "lockJS.txt";
}

<强>的JavaScript

while(programRunning) {
    do stuff;
    // Now it's time to read XML
    while("lockJS.txt" exists)
        ;  // Do nothing
    create file "lockCpp.txt";
    read xml;
    delete file "lockCpp.txt";
}

这实际上应该消除竞争条件(虽然有些理论上是可行的,但不太可能)。

如果不允许JS 到文件系统,那么你可以删除其中一个锁文件( lockCpp.txt ),如果读取了JS方面通常比写作更快,它仍然应该消除大多数冲突。

评论后编辑:

如果您只能访问JS,则可以在阅读时检查XML文档是否完整,例如根元素最后由</rootElementName>正确匹配。 这将确保文件写入完成如果C ++不在随机位置进行写入,但总是重写整个文档

另一种方法是检查文件是否随时间而变化。如果C ++只偶尔写入XML,那么你可以在几秒钟内读取它几次,比如几秒钟,如果没有改变,则使用读取值。如果改变了,请继续等待。

HTH

相关问题