コメントに基づいて更新します(以前の回答を破棄します):
OK、TinyXml のドキュメントには、他のスレッドに制限されずにドキュメントを開く方法を説明するものはあまりありませんでした。
この場合にすべきことは、インスタンスを 1 つだけ宣言し、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++ を書いていませんが、おおむねあなたが探しているものであるはずです。ベルとホイッスルは追加料金がかかります:)。