Я реализую метод синхронизации внутри моего приложения. Основные шаги, которые он выполнит:
- Получение содержимого XML с удаленного сайта
- Разобрать этот XML с помощью IXMLDomDocument2
- Обновление базы данных Firebird
Логика довольно сложная, но сама по себе она отлично работает.
Проблема в том, что я пытаюсь запустить его в отдельном потоке. Мне ясно, что в моей логике я не вижу безопасности потоков должным образом.
Итак, давайте нарежем это
I - Получить контент, используя TidHTTP
У меня не было с этим проблем, у меня тут какие-то проблемы?
II - Для IXMLDomDocument2 Я звоню
CoInitializeEx(nil, 0);
, что согласно документации должно быть достаточно для безопасного использования IXMLDomDocument2 . И, кажется, все в порядке, после добавления я не получил никакой ошибки при попытке использовать его. Есть ли здесь что-то еще?
III - Для безопасного использования Firebird
Мои проблемы здесь. Иногда это работает, иногда нет (что, я думаю, является основным признаком плохо разработанной логики потоков). Большую часть времени я получаю EInterbaseError с сообщением «Ошибка чтения данных из соединения». В других случаях он просто блокируется.
Должен ли я иметь отдельное соединение с базой данных?