1

我在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;
4

1 回答 1

0

在将我的组件的实现从 TActiveXComponent 更改为 TAutoObject 并更改相应的工厂后,我的测试中不再发生访问冲突。我没有使用自动生成的包装类 TMyComponent.Create,而是调用了 CoMyComponent.Create。唯一的问题是,我无法通过接口挂钩事件。

于 2013-10-04T16:54:47.333 回答