У меня есть приложение MFC, которое запускает отдельный поток для загрузки некоторых файлов через cURL. В начале он загружает текстовый файл с размерами файлов и временем последней записи. Затем он проверяет файлы на диске и ставит их в очередь для загрузки, если они имеют разные значения. Проблема в том, что вызов CreateFile в потоке произвольно возвращает INVALID_HANDLE_VALUE. Я всегда делаю CloseHandle () после успешного CreateFile (). Плохие файлы просто случайны. Иногда файл в корневом каталоге, другой раз файл во вложенном каталоге. Проблема не связана с локализацией или именами каталогов / файлов, поскольку иногда все проверки проходят, а иногда нет. GetLastError () иногда возвращает 2 или 3: «Файл не найден» / «Путь не найден» соответственно.
Когда я помещаю функцию, проверяющую время и размер записи файла, прямо в функцию OnInitDialog (), все работает. Это пахнет многопоточностью, но я дважды проверил все, от выделения памяти до файловых дескрипторов.
Тот же код работает в консольном приложении и в отдельном потоке.
Платформа Win7 64bit.
Статическая привязка к среде выполнения и MFC.