在大型文件夹(约 300,000 个对象)上,FindNextFile 最多可能需要 20 秒才能响应单个文件。我假设后台正在进行一些批量操作,但这使得操作很难取消。
有没有办法以异步模式运行FindNextFile,以便在不再需要该信息时可以取消它?
Win7、x64、NTFS。
旁注:Windows 缓存信息后,FindNextFile 似乎不会出现此问题。仅在第一次尝试枚举大文件夹中的文件时。
最佳答案
不,FindNextFile 是同步的,没有可比的异步函数。解决此类问题的通常方法是多线程。您需要两个线程:一个应始终响应用户的 UI 线程和一个执行 FindNextFile 调用的工作线程。我会使用带有锁定机制的队列。逻辑看起来像这样:
工作线程:
FindFirstFile();
do
{
LockQueue();
AddFileToQueue();
UnlockQueue();
while (FindNextFile() && !UserCanceled());
SetAllFilesDone();
用户界面线程:
while (!UserCanceled() && !AllFilesDone())
{
LockQueue();
GetFileFromQueue();
UnlockQueue();
ProcessFile();
}
关于windows - 有没有办法做一个异步FindNextFile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11975768/