运用多线程技术实现文件的快速搜索
2006-07-20 11:42:08 来源:WEB开发网核心提示: void GetFilePath(){m_event.ResetEvent();//将事件置为无信号状态uThreadCount=0;m_strPathArray.RemoveAll();m_param.strPath=m_strPath;m_param.strFileName=m_str
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);
}
}
四、 如果想中途停止搜索,只需先将线程对象存放于一线程对象数组,当然每增加一个线程则添加一个线程对象到数组,每返回一个线程,则将该线程对象从数组中删除。这样在你想终止搜索时,可操作这些线程对象即可达到目的。具体调用两个函数:
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环境中编译通过。
更多精彩
赞助商链接