我在delphi上使用线程模型“both”创建了一个activex组件。它运行良好,直到我执行创建 50 个或更多线程并开始在每个线程上创建 activex 的压力测试。在这种情况下,经过一段时间的完美执行,在 AxCmps.TActivexComponentControl.Create 内部创建组件时发生访问冲突错误,甚至没有到达我的组件初始化代码。发生异常的特定点在 TWinControl.Create 上。
有谁知道这是否是一个错误,或者我是否通过让多个线程创建具有“两个”线程模型的组件实例而做错了?
编辑:组件不是可见的(意味着它是一个不可见的活动 x)
Edit2:如果我用关键部分包装组件的创建和释放,那么问题就不会发生
线程代码:
Coinitialize(nil);
try
for _j := 1 to LOOPS do
begin
try
CS.Enter;
_comp := MyComp.Create(nil);
CS.Leave;
try
CallMethods; //not synchronized
finally
CS.Enter;
_comp.Free;
CS.Leave;
end;
except
on E: Exception do
LogErrors(E);
end;
end;
finally
Couninitialize;
end;