在另一个问题中,我们确定是的,CreateDirectory
偶尔会因 的未记录GetLastError
值而失败ERROR_ACCESS_DENIED
,并且处理这种情况的正确方法可能是再试几次。实现这样的算法很容易,但是当你不知道如何重现它时,测试它就不是那么容易了。
我不需要理论来解释为什么会发生这种情况。这可能是Windows中的一个错误,是的。它也可能是设计使然。最终,在这一点上,这并不重要,因为微软发布了这种行为,我必须应对。
我也不需要解释多任务操作系统理论以及 Windows 通常如何实现它。我以写系统软件为生。我了解的很少。
我现在需要的是一种重现故障的可靠方法,这样我就可以为应对的代码编写一个测试用例。这是我到目前为止所尝试的:
-
我编写了测试程序 P1,它缓慢而反复地列举了准父母的内容。同样,我编写了测试程序 P2,它除了反复尝试删除并在可能的父目录中创建一个目录之外什么都不做。我认为长时间保持枚举打开可能会使问题更有可能。单独运行 P2 会偶尔产生一段时间的故障(大约每隔几分钟,持续大约 10 毫秒)。同时运行 P1 和 P2 似乎不会使故障变得更频繁或更长时间。
-
我同时运行了两个 P2 实例,这似乎并没有使故障变得更频繁或更长时间。
-
我修改了 P2 以便它可以创建除目录之外的文件,并且在 P1 的同时运行它似乎不会使故障变得更频繁或更长时间。
-
我同时运行了 P1 和具有不同参数的多个 P2 实例,这似乎并没有使故障变得更频繁或更长时间。
- 我编写了测试程序 P3,它将项目移入和移出可能的父级,并与 P2 同时运行 P3,这似乎不会使失败更频繁或更长时间。
还有其他想法吗?