【发布时间】:2013-09-14 22:46:00
【问题描述】:
我有一个带有initialization 和finalization 部分的单元。该单元包含一个复杂对象,该对象在initialization 中实例化并在finalization 中销毁。但是,此对象还包含一个 ADO 连接。这使得跨线程使用它时成为一个问题,因为 ADO 是 COM,并且需要为每个线程初始化。
这是我目前处理这个全局对象实例的方式:
uses
ActiveX;
...
initialization
CoInitialize(nil);
_MyObject:= TMyObject.Create;
finalization
_MyObject.Free;
CoUninitialize;
end.
这仅适用于主线程。任何其他线程都无法访问它,并会返回异常CoInitialize has not been called。
如何解决这个问题以使这个单元线程安全?我需要一种方法来挂钩创建的任何线程的每次创建/销毁,并且每个线程都需要引用该对象的不同实例。但是如何去做呢?
【问题讨论】:
-
您希望每个线程调用 CoInitialize?因此,进行下一个合乎逻辑的步骤并从每个线程调用 CoInitialize。
标签: multithreading delphi initialization delphi-xe2 ado