我有一个单位有一个initialization和finalization部分.这个单元包含一个复杂的对象,它被实例化initialization并在其中被破坏finalization.但是,此对象还包含ADO连接.这使得在跨线程使用它时出现问题,因为ADO是COM,需要为每个线程初始化.
这就是我当前处理这个全局对象实例的方式:
uses
ActiveX;
...
initialization
CoInitialize(nil);
_MyObject:= TMyObject.Create;
finalization
_MyObject.Free;
CoUninitialize;
end.
Run Code Online (Sandbox Code Playgroud)
这仅适用于主线程.任何其他线程都无法访问它,并将返回异常CoInitialize has not been called.
如何解决这个问题,使这个单元具有线程安全性?我需要一种方法来挂钩创建的任何线程的每个创建/销毁,并且每个线程都需要引用该对象的不同实例.但是如何去做呢?