访问被另一个线程拒绝

时间:2010-05-24 08:08:03

标签: delphi winapi multithreading

在程序中我跨越一个线程(“工作线程”)。 Hera我复制一些文件将一些数据写入数据库,最终删除一些其他文件或目录。一切正常。现在的问题是,我决定将删除操作移到其他一些线程。所以工作线程现在复制文件或目录,写入数据库,如果需要删除一些其他文件,这个线程跨越另一个线程,第二个线程删除了所需的文件或目录。

问题在于,删除过去在工作线程中完成100%工作,现在当在辅助线程中完成相同操作时,我有时会获得“拒绝访问”错误,文件无法删除。不,工作线程肯定不会加入要删除的文件和目录。

有时(但并非总是)主线程冒充某些用户,因此如果需要,删除线程也会在模拟下运行,只是为了授予删除文件所需的权限,所以这不应该是问题。

任何人都知道为什么会发生这种情况?

2 个答案:

答案 0 :(得分:3)

使用Process Explore r检查文件锁定的内容。

答案 1 :(得分:1)

我真的不认为这是相关的......但是尝试禁用Window的Prefetch。我们操作的Prefetch锁定文件导致了很多麻烦,但那是在应用程序的启动时。据我所知,Prefetch应该只在系统启动时和应用程序启动时读取文件(取决于当前配置值),但也许在创建新线程时也是如此。