Обновление на основе комментариев (записка предыдущего ответа):
ОК, я не видел много в документации 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 ++, но это должно быть примерно то, что вы ищете. Колокола и свистки стоят дополнительно:).