【发布时间】:2011-10-31 14:11:34
【问题描述】:
我有一个 MFC 应用程序,它会启动一个单独的线程来通过 cURL 下载一些文件。一开始它会下载一个包含文件大小和最后写入时间的文本文件。然后它检查磁盘上的文件,如果它具有不同的值,则将其排队下载。问题是;线程中的 CreateFile 调用任意返回 INVALID_HANDLE_VALUE。我总是在 CreateFile() 成功后执行 CloseHandle()。失败的文件只是随机的。有时是根目录中的文件,有时是嵌套目录中的文件。该问题与本地化或目录/文件名无关,因为有时所有检查都通过但有时没有。 GetLastError() 有时会返回 2 或 3,分别是“找不到文件”/“找不到路径”。
当我将检查文件写入时间和大小的函数直接放入 OnInitDialog() 函数时,一切正常。这听起来像是一个多线程问题,但我仔细检查了从内存分配到文件句柄的所有内容。
相同的代码在控制台应用程序中也可以在单独的线程中运行。
平台是Win7 64bit。
静态链接到运行时和 MFC。
【问题讨论】:
-
你使用的是绝对路径还是相对路径?也许另一个线程正在更改当前目录,导致您的相对路径无效。
-
我不能感谢你... :) 让它成为一个答案,这样我就可以了。
-
继续提交您自己的答案并接受它。
标签: multithreading winapi mfc createfile