龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C++实现多线程查找文件实例

时间:2014-10-13 02:53来源:网络整理 作者:网络 点击:
分享到:
这篇文章主要介绍了C++实现多线程查找文件实例,对于深入学习C++程序设计有着很好的参考借鉴价值,需要的朋友可以参考下

主要是多线程的互斥 文件 的查找
多线程互斥的框架

复制代码 代码如下:
//线程函数 
UINT FinderEntry(LPVOID lpParam) 

    //CRapidFinder通过参数传递进来  
    CRapidFinder* pFinder = (CRapidFinder*)lpParam; 
    CDirectoryNode* pNode = NULL; 
    BOOL bActive = TRUE; //bActive为TRUE,表示当前线程激活 
    //循环处理m_listDir列表中的目录 
    while (1) 
    { 
        //从列表中取出一个目录 
        ::EnterCriticalSection(&pFinder->m_cs); 
        if (pFinder->m_listDir.IsEmpty()) //目录列表为空,当前线程不激活,所以bAactive=FALSE 
        { 
            bActive = FALSE; 
        } 
        else 
        { 
            pNode = pFinder->m_listDir.GetHead(); //得到一个目录 
            pFinder->m_listDir.Remove(pNode);    //从目录列表中移除 
        } 
        ::LeaveCriticalSection(&pFinder->m_cs); 
        //如果停止当前线程 
        if (bActive == FALSE) 
        { 
            //停止当前线程 
            //线程数-- 
            pFinder->m_nThreadCount--; 
             
            //如果当前活动线程数为0,跳出,结束 
            if (pFinder->m_nThreadCount == 0) 
            { 
                ::LeaveCriticalSection(&pFinder->m_cs); 
                break; 
            } 
            ::LeaveCriticalSection(&pFinder->m_cs); 
            //当前活动线程数不为0,等待其他线程向目录列表中加目录 
            ::ResetEvent(pFinder->m_hDirEvent); 
            ::WaitForSingleObject(pFinder->m_hDirEvent, INFINITE); 
 
            //运行到这,就说明其他线程唤醒了本线程 
             
            pFinder->m_nThreadCount++; //激活了自己的线程,线程数++ 
             
            bActive = TRUE; //当前线程活了 
            continue; //跳到while, 
        } 
        //从目录列表中成功取得了目录 
<span style="white-space:pre">      </span>...................... 
         
        //if (pNode) 
        //{ 
        //  delete pNode; 
        //  pNode = NULL; 
        /
精彩图集

赞助商链接