Windows Server 2003上多线程应用程序中的访问冲突

时间:2010-11-30 12:45:02

标签: multithreading arrays delphi

2 个答案:

答案 0 :(得分:0)

更多的故障排除提示而非实际答案...... 对于#2,硬件是否相同?如果不是,这可能真的是单核与多核(或处理器)的问题。由于它是一个多线程应用程序,因此期望它与多个处理器/内核的行为不同是不合理的。因此,请确保您没有使用太多变量(硬件与操作系统)来弥补问题。

答案 1 :(得分:0)

我终于设法追查这个问题,我想你可以称之为小学生错误!

在每个线程中,我创建了一个用于运行查询的TADOQuery组件。我将所有者设置为主窗体,但是在线程终止之前,我清除了内存:

adoqry := TADOQuery.create(frmMain);
try
  <code>
finally
  freeAndNil(adoqry);
end;

似乎问题是将TADOQuery组件的所有者设置为应用程序的主屏幕,这意味着主屏幕也会在应用程序关闭时尝试释放内存,但是假设应用程序保持不变当用户运行数千个查询时,这些引用似乎堆叠起来,最终应用程序放弃并开始抛出访问冲突。

我已经将TADOQuery组件的所有者更改为nil,现在应用程序工作正常,即使在几千个查询运行之后(它在最初的一百个左右后才会崩溃)。