0

在Windows XP 32 位虚拟机上测试我的一些代码时,我注意到一些事情:我的应用程序总是挂起。我在我的Windows 7 64 位计算机上从未出现过这种现象,但它在 VM 上是 100% 可重现的。
通过远程调试,我发现程序挂在了IOmniTaskControl.WaitForInit. 我设置了一个断点,TOmniWorker.Initialize但它没有被触发。

这是我创建任务的方法:

constructor TThreadedImportCache.Create(
  const AImportCacheConstructorParams: TImportCacheConstructorParamsWrapper);
begin
  inherited Create;

  FIsFlushingCounter := CreateCounter;

  FWorker      := TImportCacheWorker.Create(AImportCacheConstructorParams, FIsFlushingCounter);
  FTaskControl := CreateTask(FWorker, BuildUniqueIdent(TImportCacheWorker.ClassName));
  FTaskControl.Unobserved;
  FTaskControl.Schedule;
end;

当我替换FTaskControl.ScheduleFTaskControl.Run任务初始化时,运行良好并且我的应用程序不会冻结。

我的问题:

  1. 我一直在滥用Schedule电话吗?我认为这是一个可以使用的,因为它没有等待实际运行,并且任务在短时间内开始。它应该如何使用?

    或者

  2. 这是关于 Windows XP 上的线程(通过OmniThreadLibrary )的一些问题/不兼容性吗?

4

0 回答 0