扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
HANDLE FindFirstFile(LPCTSTR lpFileName,LPWIN32_FIND_DATA lpFindFileData ); BOOL FindNextFile( HANDLE hFindFile, LPWIN32_FIND_DATA lpFindFileData ); |
typedef struct tagTHREADPARAM { CString strPath; CString strFileName; }THREADPARAM m_param; |
CMutex m_mutexThreadCount,m_mutexThreadParam,m_mutexPath; |
CEvent m_event(FALSE,FALSE,NULL,NULL); UINT uThreadCount=0;//产生的线程数 CStringArray m_strPathArray;//存放搜索到的文件路径数组 //线程函数 UINT GetFilePathThreadProc(LPVOID pParam) { if(pParam==NULL) AfxEndThread(NULL); THREADPARAM * m_pParam=(THREADPARAM *)pParam; CString strPath=m_pParam->strPath; CString strFileName=m_pParam->strFileName; m_mutexThreadCount.Lock(); uThreadCount++; m_mutexThreadCount.Unlock(); HANDLE hFile; WIN32_FIND_DATA *pInfo=new WIN32_FIND_DATA; hFile = ::FindFirstFile(strPath+"\\*.*",pInfo); if(hFile==INVALID_HANDLE_VALUE) { delete pInfo; m_mutexThreadCount.Lock(); uThreadCount--; //所有的线程完成,则激活事件,通知应用程序完成搜索(下同) if(uThreadCount==0) m_event.SetEvent(); m_mutexThreadCount.Unlock(); return 0; } do{ if(pInfo->cFileName[0]==''.'') continue; char cFileName[MAX_PATH]; strcpy(cFileName,pInfo->cFileName); CString strFile=cFileName; if(pInfo->dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY) { //如果是目录,则开辟新的搜索线程 m_mutexThreadParam.Lock(); m_param.strPath=strPath+"\\"+strFile; m_param.strFileName=strFileName; AfxBeginThread(GetFilePathThreadProc,&m_param, THREAD_PRIORITY_NORMAL); m_mutexThreadParam.Unlock(); } else { //如果是文件则直接与要搜索的文件比较 if(strFile==strFileName){ m_mutexPath.Lock(); m_strPathArray.Add(strPath+"\\"+strFile); m_mutexPath.Unlock(); m_mutexThreadCount.Lock(); uThreadCount--; if(uThreadCount==0) m_event.SetEvent(); m_mutexThreadCount.Unlock(); return 0; } } } while(::FindNextFile( hFile,pInfo)); ::FindClose(hFile); delete pInfo; m_mutexThreadCount.Lock(); uThreadCount--; if(uThreadCount==0) m_event.SetEvent(); m_mutexThreadCount.Unlock(); return 0; } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者