Мое приложение Win32 A1 (на самом деле набор процессов) пытается использовать CreateDirectory
для создания каталога D1 в родительском каталоге P. Путь к P - это значение переменной среды TMP
, которая делает P потенциально занятое, но в целом разрешающее место. В подавляющем большинстве случаев все работает нормально, но редко CreateDirectory
дает сбой, а GetLastError
затем возвращает ERROR_ACCESS_DENIED
, значение которого в этом контексте не задокументировано.
Я написал тестовое приложение A2, которое ничего не делает, но многократно создает и удаляет каталог D2 настолько быстро, насколько это возможно в P, и я выбрал глупое длинное имя для D2, которое, я уверен, не сталкивается ни с каким другим Программа будет использовать. Раз в несколько минут, есть небольшая доля секунды, в течение которой попытки А2 создать D2 приводят только к ERROR_ACCESS_DENIED
сбоям.
А1 очень занят в P во время своего бега. В то время как A1 и A2 работают одновременно, периоды сбоя ERROR_ACCESS_DENIED
происходят несколько чаще, как будто A1 и A2 конкурируют за эксклюзивный доступ к P. (Я абсолютно уверен, что A1 не использует то же имя, что и D2.: -)
Я несколько склонен считать ERROR_ACCESS_DENIED
значением «попробуйте снова через несколько миллисекунд, и если это не сработает после нескольких попыток, сдавайтесь», но я обеспокоен тем, что [a] в некоторых в некоторых случаях это может означать что-то постоянное, к чему я должен немедленно прислушаться, и [b] поскольку я действительно не знаю, что происходит, возможно, не удастся с уверенностью установить разумное количество времени, чтобы продолжать попытки.
У кого-нибудь есть опыт с этим? Любой совет? Особую ценность на данный момент представляют подсказки о том, что является причиной этого, чтобы я мог легче воспроизвести проблему.