根据评论更新(废弃以前的答案):
好的,我在 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++ 了,但它应该大致是您正在寻找的。花里胡哨的费用额外收费:)。