我正在我的应用程序中实施一种同步方法。它将执行的主要步骤如下:
- 从远程站点获取XML内容 - 使用IXMLDomDocument2解析此XML - 更新Firebird数据库
逻辑相当复杂,但本质上它正常运行。
问题在于我尝试在单独的线程中运行它时。对我来说很清楚,我的逻辑没有正确实现线程安全。
所以让我们分开看:
I - 使用TidHTTP获取内容
我没有遇到任何问题,在这里我应该有任何顾虑吗?
II - 对于IXMLDomDocument2,我正在调用
- 从远程站点获取XML内容 - 使用IXMLDomDocument2解析此XML - 更新Firebird数据库
逻辑相当复杂,但本质上它正常运行。
问题在于我尝试在单独的线程中运行它时。对我来说很清楚,我的逻辑没有正确实现线程安全。
所以让我们分开看:
I - 使用TidHTTP获取内容
我没有遇到任何问题,在这里我应该有任何顾虑吗?
II - 对于IXMLDomDocument2,我正在调用
CoInitializeEx(nil, 0);
根据文档,这应该足以安全地使用IXMLDomDocument2。在添加后,当我尝试使用它时没有任何错误,似乎一切正常。还有其他需要注意的问题吗?
III - 安全使用Firebird
我的问题出现在这里。有时它可以工作,有时候不行(我猜这是线程逻辑设计不良的主要症状)。大部分时间我会收到一个EInterbaseError错误,其中包含“从连接中读取数据时出错”的消息。其他时候它只是锁定。
我应该使用一个单独的数据库连接吗?