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