界面停止响应的问题,恳请高手指点???
各位好!我用MFC做了个基于对话框的小程序,在界面上有个按钮,点击它,则程序开始每过10秒钟就去遍历一下指定文件夹下的文件(SetTimer),并执行相应的操作。现在的问题是,如果文件夹下的文件很多时,(如超过40个),则程序的界面就停止响应,具体表现为,拖动对话框和最小化,关闭对话框等都没有响应,要等过了一会程序执行完遍历以后才有响应。如果程序去执行“....执行响应操作1...”,程序同样会出现上面的问题,并且界面也不再刷新。我百思不得其解,刚接触MFC才半年,解决起来很吃力,恳请大家帮帮忙。遍历文件夹下文件的代码如下,我已加了注释:
CString m_FolderPath ="I:\\NC" ; //文件夹的路径
char szFile[MAX_PATH],Hint[256];
WIN32_FIND_DATA FindFileData;
strcpy(szFile,m_FolderPath);
strcat(szFile,"\\*.*");
HANDLE hFind=::FindFirstFile(szFile,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind) return;
while(TRUE)
{
if((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)==0) //遍历到一个文件
{
char FileName[256];
strcpy(FileName,m_FolderPath);
strcat(FileName,"\\\\");
strcat(FileName,FindFileData.cFileName); //得到文件的完整路径
SYSTEMTIME LastModifyTime;
SYSTEMTIME CreationTime;
GetDirTime(FileName,LastModifyTime,CreationTime);//得到文件最后被修改的时间
if(LastModifyTime.wYear!=1989) //如果被修改时间不是特定的1989年,就执行响应1
{
.....执行响应的操作 1.....//这个操作所需的时间和占用的CPU资源比较多
}
else
{
//如果这个文件的最后修改时间和系统时间相差2天,就删除这个文件。
CTime tNow=CTime::GetCurrentTime();
CTime tOld(CreationTime);
CTimeSpan span = tNow - tOld ;
float span1= float(span.GetTotalSeconds());
if(span1/86400 >= 2) DeleteFile(FileName);
}
}
if(!FindNextFile(hFind,&FindFileData)) break; //遍历完,则挑出循环
}
FindClose(hFind);