3.调用线程函数执行搜索
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<m_strPathArray.GetSize();i++) { AfxMessageBox(m_strPathArray.GetAt(i),MB_OK|MB_ICONINFORMATION); } } |
4.如果想中途停止搜索,只需先将线程对象存放于一线程对象数组,当然每增加一个线程则添加一个线程对象到数组,每返回一个线程,则将该线程对象从数组中删除。这样在你想终止搜索时,可操作这些线程对象即可达到目的。具体调用两个函数:
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++(www.cppentry.com)6.0和Windows2000环境中编译通过。
|