在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.Schedule
为FTaskControl.Run
任务初始化时,运行良好并且我的应用程序不会冻结。
我的问题:
我一直在滥用
Schedule
电话吗?我认为这是一个可以使用的,因为它没有等待实际运行,并且任务在短时间内开始。它应该如何使用?或者
这是关于 Windows XP 上的线程(通过OmniThreadLibrary )的一些问题/不兼容性吗?