我有一个 MFC 应用程序,它启动一个单独的线程来通过 cURL 下载一些文件。一开始它会下载一个包含文件大小和最后写入时间的文本文件。然后它检查磁盘上的文件,如果它具有不同的值,则将其排队下载。问题是;线程中的 CreateFile 调用任意返回 INVALID_HANDLE_VALUE。我总是在 CreateFile() 成功后执行 CloseHandle()。失败的文件只是随机的。有时是根目录中的文件,有时是嵌套目录中的文件。该问题与本地化或目录/文件名无关,因为有时所有检查都通过但有时没有。GetLastError() 有时会返回 2 或 3,它们分别是“找不到文件”/“找不到路径”。
当我将检查文件写入时间和大小的函数直接放入 OnInitDialog() 函数时,一切正常。这听起来像是一个多线程问题,但我仔细检查了从内存分配到文件句柄的所有内容。
相同的代码在控制台应用程序中也可以在单独的线程中工作。
平台为Win7 64位。
静态链接到运行时和 MFC。