- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 xml 文件,程序的每个新线程 (BHO) 都使用同一个 Tinyxml 文件。
每次在程序中打开一个新窗口时,它都会运行这段代码:
const char * xmlFileName = "C:\\browsarityXml.xml";
TiXmlDocument doc(xmlFileName);
doc.LoadFile();
//some new lines in the xml.. and than save:
doc.SaveFile(xmlFileName);
问题是第一个窗口正在向xml添加新数据并保存后,下一个窗口无法添加。虽然下一个可以读取xml中的数据,但是不能写入。
我想过两种可能让它工作,但我不知道如何实现它们:
任何帮助或更好地理解问题都会很棒。谢谢。
最佳答案
根据评论更新(废弃之前的答案):
好的,我在 TinyXml 文档中没有看到太多告诉我们如何在不受其他线程限制的情况下打开文档的信息。
在这种情况下您应该做的是只向 TiXmlDocument
声明一个实例并在线程之间共享它。每当一个线程写入文件时,它都会进入临界区,写入它需要写入的内容,保存文件,然后退出临界区。
我没有看到其他解决方法。
根据评论更新:
由于您使用的是 MFC 线程,因此您的代码应如下所示:
class SafeTinyXmlDocWrapper
{
private:
static bool m_isAlive = FALSE;
static CCriticalSection m_criticalSection;
char* m_xmlFileName;
TiXmlDocument m_doc;
public:
SafeTinyXmlDocWrapper()
{
m_xmlFileName = "C:\\browsarityXml.xml";
m_doc = TiXmlDocument(m_xmlFileName);
m_doc.LoadFile();
m_isAlive = TRUE;
}
~SafeTinyXmlDocWrapper()
{
CSingleLock lock(&m_criticalSection);
lock.Lock(); // only one thread can lock
m_isAlive = FALSE;
// cleanup and dispose of the document
lock.Unlock();
}
void WriteBatch(BatchJob& job)
{
CSingleLock lock(&m_criticalSection);
lock.Lock(); // only one thread can lock
if(m_isAlive) // extra protection in case the destructor was called
{
// write the batch job to the xml document
// save the xml document
m_doc.SaveFile(m_xmlFileName);
}
lock.Unlock(); // the thread unlocks once it's done
}
}
我已经有一段时间没有编写 C++ 了,但它应该大致就是您要找的东西。钟声和口哨声需要额外付费 :)。
关于c++ - Tinyxml 多任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2406057/
我正在为我的应用程序使用 TinyXml 库,但 TiXmlDocument 对象只能加载 Xml 文件。它如何从字符串加载 Xml。你能告诉我如何做到这一点吗?非常感谢 涂。 最佳答案 您可以使用
有没有人有代码来遍历 TinyXML 中的子树的节点? IE:给定一个父级,遍历它的所有子级和所有子级的子级? 最佳答案 Begemoth 的回答对我来说听起来不错。 这是 TiXmlElement
大家好:)我开发了导出.xml文件(Android dimens文件)的程序。我的程序将导出 dimens_ldpi.xml、dimens_mdpi.xml、dimens_hdpi.xml 和 dim
我想在 xml 文件中添加元素。谁能帮我做到这一点? 以下是我的代码试用。 1.79639 0.430521 2.06832 0.652695
我不知道我做错了什么。我正在用 C++ 编写一个简单的程序来使用 TinyXml 编辑 xml 配置文件。 这是我的配置文件:
你好, 我有以下内容: class pers { public: pers(); std::string name; long favourite_numb
我正在尝试创建一个 XML 签名机制。我的 XML 可以像下面这样: ... ... 事实上,它对 Main 节点下的数据类型是不可知的。我只想计算包含在 Main 节点中的数据的
我有一个看起来像这样的 xml 文件 我正在尝试使用 TinyXML 在最后一个记录元素(具有最高 ID 的那个)之后插入
bool win::checkIfFScreen(sf::RenderWindow &window) { TiXmlDocument doc; TiXmlElement * fulls
我有一个这样的 xml 文件: 我想使用 tinyxml 根据条目名称(例如 (LengthFocalPointToISOCenter))检索所有值(例如 558)。这是我的代码,还没
试图编译 TinyXml++ tutorial使用 CodeBlocks (16.01) 和使用 VS2013,我在以下行遇到相同的错误: ticpp::Element* pElem = doc.Fi
我正在尝试将文件指针 popen 的输出连接到 TinyXML 的输入。 根据主页,最好的方法是使用解析方法: C style input: * based on FILE* * th
我正在尝试使用 TinyXML (c++) 从 xml 文件加载数据。 int height = rootElem->attrib("height", 480); rootElem 是加载的 xml
我正在尝试使用 TinyXml 从属性值中获取 std::string 。我唯一能得到的是 const char * val,而且我找不到任何方法从 const char * 转换为 std::str
我最近开始使用 tinyXML。问题是当我运行我的程序来读取 xml 时,它返回一个访问冲突。一条共同的线是: doc.FirstChildElement("Map")->FirstChildElem
我有一个 XML 文件,其中包含如下几行: B) ?(?&) ?(?E)"> 我在 C++ 中使用 TinyXML 库来解析此 XML 文件,但是当我尝试获取此类行的“pat”属性时,TinyXML
我有一个无法修复的 TinyXML 问题。我已经使用 C++ 扩展了一个 MFC 应用程序来工作。该应用程序进行自动化测试。完成后,它将所有数据保存在一个 XML 文件中。在我的 DOM 树的开头下方
当我尝试执行代码时遇到段错误,它编译时没有错误/警告,但在执行时给出错误段错误。下面是代码片段。 XMLElement *pStartTimeStamp = pRoot->FirstChildElem
我正在使用 tinyxml 来保存来自文本 ctrl 的输入。用户可以将他们喜欢的任何内容复制到文本框中,然后将其写入 xml 文件。我发现新行没有保存,& 字符也没有保存。奇怪的是 tinyxml
我有一个 xml 文件,程序的每个新线程 (BHO) 都使用同一个 Tinyxml 文件。 每次在程序中打开一个新窗口时,它都会运行这段代码: const char * xmlFileName = "
我是一名优秀的程序员,十分优秀!