| ²é¿´: 155 | »Ø¸´: 0 | |||
| µ±Ç°Ö÷ÌâÒѾ´æµµ¡£ | |||
zsgllyľ³æ (ÖøÃûдÊÖ)
|
[½»Á÷]
ÔËÓöàÏ̼߳¼ÊõʵÏÖÎļþµÄ¿ìËÙËÑË÷
|
||
|
´ÓÒ»Ãû³õѧÕßµ½Èç½ñÒ»ÃûÊìÁ·µÄVC³ÌÐòÔ±£¬µÃÒæÓÚVC֪ʶ¿âµÄ°ïÖú£¬Ò»Ö±ÏëןÃÈçºÎ»Ø±¨¡£ÏÖ׫´ËÎÄ£¬Ò»À´ÂÔ±íÐÄÒ⣬¶þÀ´ºÍVC°®ºÃÕß½»Á÷¡£ ²Ù×÷ϵͳһ°ã¶¼ÌṩÁËÎļþËÑË÷µÄ¹¦ÄÜ£¬µ«²ÉÓõÄÊÇ˳ÐòËÑË÷£¬ËÑË÷ЧÂʺܵס£¶øÇÒ°´´Ë·¨±à³ÌÊ®·Ö·³Ëö£¬ÔÚĿ¼²ã´ÎºÜ¶àʱ£¬ÍùÍù²»ºÃ´¦Àí¡£±¾ÎIJÉÓöàÏ̼߳¼ÊõʵÏÖÎļþµÄ¿ìËÙËÑË÷£¬´úÂëÁ¿ºÜÉÙ£¬Ö´ÐÐЧÂʼ«¸ß¡£ Æä»ù±¾Ë¼ÏëÆäʵºÜ¼òµ¥£¬¾ÍÊÇÕÒµ½Ò»¸öĿ¼¾Í¿ª±ÙÒ»¸öỊ̈߳¬ÎļþµÄ»°µ±È»ÔÚÏß³ÌÄھʹ¦ÀíÁË¡£ÕâÑùʵÏÖÁËͬ²½ËÑË÷£¬Ëٶȵ±È»¿ìÆðÀ´ÁË¡£ ±¾ÎijÌÐòÔËÐÐЧ¹ûͼ ÒÔϽéÉÜVC¾ßÌåʵÏÖ£º Ò»¡¢ ËÑË÷Óõ½Á½¸öwin32µÄÁ½¸öº¯Êý: HANDLE FindFirstFile(LPCTSTR lpFileName£¬LPWIN32_FIND_DATA lpFindFileData ); BOOL FindNextFile( HANDLE hFindFile, LPWIN32_FIND_DATA lpFindFileData ); ¶þ¡¢ ½¨Á¢Ï̺߳¯Êý Ê×ÏÈÒª¶¨ÒåÏ̵߳IJÎÊý½á¹¹ÓÃÓÚÎļþÐÅÏ¢µÄ´«µÝ£º 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; } Èý¡¢ µ÷ÓÃÏ̺߳¯ÊýÖ´ÐÐËÑË÷ void GetFilePath() { m_event.ResetEvent();//½«Ê¼þÖÃΪÎÞÐźÅ״̬ uThreadCount=0; m_strPathArray.RemoveAll(); m_param.strPath=m_strPath; m_param.strFileName=m_strFileName; m_param.m_pListInfo=&m_ListInfo; //Æô¶¯Ïß³Ì AfxBeginThread(GetFilePathThreadProc,&m_param, THREAD_PRIORITY_NORMAL); //µÈ´ýËÑË÷Íê³É»òÖÕֹʼþµÄ·¢Éú ::WaitForSingleObject(m_event.m_hObject,INFINITE); if(m_strPathArray.GetUpperBound()==-1){ AfxMessageBox("ûÕÒµ½Îļþ",MB_OK|MB_ICONINFORMATION);return;} for(int i=0;i AfxMessageBox(m_strPathArray.GetAt(i),MB_OK|MB_ICONINFORMATION); } } ËÄ¡¢ Èç¹ûÏëÖÐ;ֹͣËÑË÷£¬Ö»ÐèÏȽ«Ï̶߳ÔÏó´æ·ÅÓÚÒ»Ï̶߳ÔÏóÊý×飬µ±È»Ã¿Ôö¼ÓÒ»¸öÏß³ÌÔòÌí¼ÓÒ»¸öÏ̶߳ÔÏóµ½Êý×飬ÿ·µ»ØÒ»¸öỊ̈߳¬Ôò½«¸ÃÏ̶߳ÔÏó´ÓÊý×éÖÐɾ³ý¡£ÕâÑùÔÚÄãÏëÖÕÖ¹ËÑË÷ʱ£¬¿É²Ù×÷ÕâЩÏ̶߳ÔÏ󼴿ɴﵽĿµÄ¡£¾ßÌåµ÷ÓÃÁ½¸öº¯Êý£º BOOL GetExitCodeThread(HANDLE hThread,LPDWORD lpExitCode); BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode); BOOL GetExitCodeThread( HANDLE hThread, // handle to the thread LPDWORD lpExitCode // address to receive termination status ); BOOL TerminateThread( HANDLE hThread, // handle to thread DWORD dwExitCode // exit code ); ³ÌÐòʵÏֵľßÌåÇé¿öÇë²Î¼ûÔ´´úÂë¡£±¾ÎÄÔÚVC++6.0ºÍWindows2000»·¾³ÖбàÒëͨ¹ý¡£ [ Last edited by »ÃÓ°ÎÞºÛ on 2006-11-29 at 07:47 ] |
» ²ÂÄãϲ»¶
08¹¤Ñ§µ÷¼Á
ÒѾÓÐ16È˻ظ´
0703»¯Ñ§µ÷¼Á£¬Çóµ¼Ê¦ÊÕ
ÒѾÓÐ7È˻ظ´
0854AI CV·½ÏòÕÐÊÕµ÷¼Á
ÒѾÓÐ3È˻ظ´
Çóµ÷¼Á323²ÄÁÏÓ뻯¹¤
ÒѾÓÐ3È˻ظ´
ÉúÎïѧѧ˶Çóµ÷¼Á
ÒѾÓÐ9È˻ظ´
289Çóµ÷¼Á
ÒѾÓÐ8È˻ظ´
07»¯Ñ§280·ÖÇóµ÷¼Á
ÒѾÓÐ5È˻ظ´
300·Ö£¬²ÄÁÏ£¬Çóµ÷¼Á£¬Ó¢Ò»Êý¶þ
ÒѾÓÐ4È˻ظ´
¡¾¿¼Ñе÷¼Á¡¿»¯Ñ§×¨Òµ 281·Ö£¬Ò»Ö¾Ô¸ËÄ´¨´óѧ£¬³ÏÐÄÇóµ÷¼Á
ÒѾÓÐ16È˻ظ´
0854µç×ÓÐÅÏ¢Çóµ÷¼Á
ÒѾÓÐ7È˻ظ´














»Ø¸´´ËÂ¥