Delphi线程最佳实践

时间:2012-03-09 20:40:42

标签: multithreading delphi thread-safety delphi-7

我正在我的应用程序中实现同步方法。它将执行的主要步骤是:

  • 从远程站点获取XML内容
  • 使用 IXMLDomDocument2
  • 解析此XML
  • 更新Firebird数据库

逻辑非常复杂,但本身工作正常。

问题是当我尝试在单独的线程中运行它时。我很清楚,在我的逻辑中,我没有正确地获得线程安全。

所以让我们分开它

I - 使用 TidHTTP

获取内容

没有任何问题,如果我有任何疑虑吗?

II - 对于 IXMLDomDocument2 我正在调用

CoInitializeEx(nil, 0);

根据the documentation应足以安全地使用 IXMLDomDocument2 。它似乎没问题,添加后我尝试使用它时没有任何错误。还有什么值得关注的吗?

III - 安全使用Firebird

我的问题在这里。有时候它有效,有时候它没有(我猜这是设计糟糕的线程逻辑的主要症状)。大多数情况下,我收到EInterbaseError,并显示消息“从连接读取数据时出错”。其他时候它只是锁定。

我是否应该与数据库建立单独的连接?

1 个答案:

答案 0 :(得分:2)

Warren指出了在后台和前台线程之间共享连接的主要问题......你有另一个问题,那就是每次调用CoInitialize都需要与CoUninitialize配对

http://msdn.microsoft.com/en-us/library/windows/desktop/ms688715(v=vs.85).aspx