【发布时间】:2010-08-21 03:59:54
【问题描述】:
我的 Win32 应用程序 A1(实际上是进程的集合)正在尝试使用 CreateDirectory 在父目录 P 中创建目录 D1。P 的路径是 TMP 环境变量的值,这使得 P 成为可能很忙但通常很宽松的地方。绝大多数情况下,一切正常,但很少有CreateDirectory 失败并且GetLastError 然后返回ERROR_ACCESS_DENIED,在此上下文中的含义没有记录。
我编写了一个测试应用程序 A2,它只在 P 中尽可能快地重复创建和删除目录 D2,我为 D2 选择了一个愚蠢的长名称,我相信它不会与任何其他程序会使用。每隔几分钟,A2 尝试创建 D2 的尝试只产生 ERROR_ACCESS_DENIED 失败的一小部分时间。
A1 在运行期间在 P 中变得非常忙碌。当 A1 和 A2 并发运行时,ERROR_ACCESS_DENIED 失败的时期发生得更频繁,好像 A1 和 A2 竞争对 P 的独占访问。(我绝对确定 A1 没有使用与 D2 相同的名称。: -)
我有点倾向于将ERROR_ACCESS_DENIED 的意思是“在几毫秒内再试一次,如果在几次尝试后仍然无效,请放弃”,但我担心 [a] 在某些情况下在某些情况下,这可能意味着我应该立即注意一些永久性的事情,并且 [b] 因为我真的不知道发生了什么,所以可能无法自信地确定一个合理的时间来继续尝试。
有人有这方面的经验吗?有什么建议吗?在这一点上特别有价值的是有关导致此问题的原因的线索,以便我可以更轻松地重现该问题。
【问题讨论】:
标签: winapi directory tmp getlasterror