亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rapidfinder.cpp

?? 最新visualC++編程200例書籍源碼包括對數據庫的操作
?? CPP
字號:
// RapidFinder.cpp: implementation of the CRapidFinder class.
//
/*===================================================================

作者:Kelvin U.V
時間:2002-9-15
功能:多線程文件查找
版本:1.0

/===================================================================*/
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "RapidFinder.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////


const int CRapidFinder::HIGHEST_PRIORITY=2;
const int CRapidFinder::ABOVE_NORMAL=1;
const int CRapidFinder::NORMAL_PRIORITY=0;
const int CRapidFinder::BELOW_NORMAL=-1;
const int CRapidFinder::LOWEST_PRIORITY=-2;

const LPCTSTR ErrMsg[]={
						{"未指定查找路徑!"},
						{"程序結束錯誤 !"},
						{"未找到目標文件!"}
						};
//---------------------------------------------------------------

CRapidFinder::CRapidFinder()
{
    m_hThrds=NULL;
	InitializeCriticalSection(&m_gCriticalSection);
	ThreadSet();
}
CRapidFinder::CRapidFinder(HWND MainHwnd,CString MatchName,CString MatchDir)
{
	m_hThrds=NULL;
	InitializeCriticalSection(&m_gCriticalSection);
	ThreadSet();
	FinderSet(MainHwnd,MatchName,MatchDir);
}
CRapidFinder::~CRapidFinder()
{
	DeleteCriticalSection(&m_gCriticalSection);  
	if(m_hExitEvent)CloseHandle(m_hExitEvent);
}

//———————————————————————————————————
void CRapidFinder::FinderSet(HWND MainHwnd,CString MatchName,CString MatchDir)
{
    FinderReset();
	m_MainhWnd=MainHwnd;

	if(!MatchName.IsEmpty())
	{	
		MatchName.MakeUpper();MatchDir.MakeUpper();
		m_strFileName=MatchName;
		m_Option|=OP_FILENAME;
	}
	m_strFileDir=MatchDir;
	
	m_hExitEvent=CreateEvent(NULL,TRUE,FALSE,"RAPIDFINDER");
	CreatePathList();
}
void CRapidFinder::ThreadSet(LONG MaxThreadCount,int priority)
{
	m_Priority=priority;
	m_ActiveCount=m_MaxThreadCount=MaxThreadCount;
    if(m_hThrds)delete []m_hThrds;//釋放線程句柄數組
	m_hThrds=new HANDLE[MaxThreadCount];

}
void CRapidFinder::FindWithText(LPCTSTR lpText,int count)
{
	if(!count)return ;
	m_TextSize=count;
	if(m_lpText)delete []m_lpText;
    m_Option|=OP_FILETEXT;
	m_lpText=new BYTE[count];
	memcpy(m_lpText,lpText,count);
	if(m_NextVal)delete []m_NextVal;
	m_NextVal=new int[count];

	CalNextPos();
}
void CRapidFinder::FinderReset()
{
	m_lpText=NULL;
	m_NextVal=NULL;
	m_Option=0;
	m_strFileName="";
	m_strFileDir="";
	m_DirList.RemoveAll();
	ResetEvent(m_hExitEvent);
	m_ExitCode=ERR;
}
void CRapidFinder::CreatePathList()
{
	Trim(m_strFileDir);

	if(m_strFileDir.IsEmpty())
	{
		SetErrNo(0);return ;
	}

	int np=0,op=0;
    CString str;
    while((np=m_strFileDir.Find(';',op))!=-1)
	{
		str=Trim(m_strFileDir.Mid(op,np-op));
		str.TrimRight('\\');
		if(!str.IsEmpty())m_DirList.AddTail((LPCTSTR)str);
		op=np+1;
	}
    str=Trim(m_strFileDir.Mid(op,m_strFileDir.GetLength()-op));
	str.TrimRight('\\');
	if(!str.IsEmpty())m_DirList.AddTail((LPCTSTR)str);
}
//----------------------------------------------------------------------
BOOL CRapidFinder::StartFinder()
{

	if(m_DirList.IsEmpty()){SetErrNo(0);return FALSE;}
  	PostMessage(m_MainhWnd,WM_THREADCOUNT,(WPARAM)m_ActiveCount,NULL);

	DWORD ThreadID;
    //創建主線程
	HANDLE hMainThread=CreateThread(NULL,0,MainThreadProc,(LPVOID)this,CREATE_SUSPENDED,&ThreadID);
	ASSERT(hMainThread);
    BOOL re=SetThreadPriority(hMainThread,m_Priority);//調整優先級
	ASSERT(re);
	ResumeThread(hMainThread);
	CloseHandle(hMainThread);
	
	return TRUE;
}
void CRapidFinder::PauseFinder()
{
	if(m_ExitCode==PAUSE)return ;
	m_ExitCode=PAUSE;
	SetEvent(m_hExitEvent);
	Sleep(40);
}
void CRapidFinder::ResumeFinder()
{ 
	SetEvent(m_hExitEvent);  
}
void CRapidFinder::StopFinder()
{
	if(m_ExitCode==STOP)return ;
	if(m_ExitCode==PAUSE)
	{
		ResumeFinder();
        Sleep(40);//延時
	}
		m_ExitCode=STOP;
	    SetEvent(m_hExitEvent);
}
//----------------------------------------------------------------------------------------------------
HANDLE CRapidFinder::StartThread(LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParam)
{
	DWORD ThreadID;
	CRapidFinder *finder=(CRapidFinder *)lpParam;

	HANDLE htmp=CreateThread(NULL,0,lpStartAddress,lpParam,CREATE_SUSPENDED,&ThreadID);
	BOOL re=SetThreadPriority(htmp,finder->m_Priority);
	ASSERT(re);
	ResumeThread(htmp);
	return htmp;
}
//------------------------------------------------------------------------------------------------------
DWORD WINAPI CRapidFinder::MainThreadProc(LPVOID lpParam)
{
   CRapidFinder *finder=(CRapidFinder *)lpParam;

resume:
   //Reset
   ResetEvent(finder->m_hExitEvent);
   finder->m_ExitCode=ERR;
   finder->m_ActiveCount=finder->m_MaxThreadCount;
   
   PostMessage(finder->m_MainhWnd,WM_THREADCOUNT,(WPARAM)(finder->m_ActiveCount),NULL);
   for(int i=0;i<finder->m_MaxThreadCount;i++)
	   finder->m_hThrds[i]=StartThread(ThreadProc,lpParam);

   WaitForMultipleObjects(finder->m_MaxThreadCount,finder->m_hThrds,TRUE,INFINITE);

   for(i=0;i<finder->m_MaxThreadCount;i++)
	   CloseHandle(finder->m_hThrds[i]); //關閉所有線程句柄
   
   
   //查看線程退出原因
   switch(finder->m_ExitCode)
   {
   case PAUSE:SendMessage(finder->m_MainhWnd,WM_THREADPAUSE,NULL,NULL);
	          ResetEvent(finder->m_hExitEvent);
			  //等待繼續查找
	          WaitForSingleObject(finder->m_hExitEvent,INFINITE);
	          goto resume;
   case EXIT:SendMessage(finder->m_MainhWnd,WM_THREADEXIT,EXIT,NULL);
	         finder->FinderReset();
	         break;;
   case STOP:SendMessage(finder->m_MainhWnd,WM_THREADEXIT,STOP,NULL);
	         finder->FinderReset();
	         break;
   default:finder->SetErrNo(1);return 0;
   }	
	return 1;
}
//----------------------------------------------------------------------------------
DWORD WINAPI CRapidFinder::ThreadProc(LPVOID lpParam)
{
   CRapidFinder *finder=(CRapidFinder *)lpParam;
   CFileFind  filefinder;
   CStringList filelist;
   CString PathStr;
   CString CurPath;
   int re;
   BYTE bNewActive=1,bOldActive;
   CString *lpFolder=new CString;
   while(1)
   {
	   bOldActive=bNewActive;
	   if(WaitForSingleObject(finder->m_hExitEvent,0)!=WAIT_TIMEOUT)
	   {
		   if(bOldActive)InterlockedDecrement(&finder->m_ActiveCount);
		   PostMessage(finder->m_MainhWnd,WM_THREADCOUNT,(WPARAM)finder->m_ActiveCount,NULL);
		   break;
	   }
       
	   if(!finder->m_ActiveCount)
	   {
		   SetEvent(finder->m_hExitEvent);
		   finder->m_ExitCode=finder->EXIT;
		   break;
	   }

  	   //進入臨界區
	   EnterCriticalSection(&finder->m_gCriticalSection);
	   if(finder->m_DirList.IsEmpty())bNewActive=0;
	   else 
	   {
	        bNewActive=1;
		    *lpFolder=finder->m_DirList.RemoveHead();
		    CurPath=*lpFolder+_T("\\*.*");
	   }
	   LeaveCriticalSection(&finder->m_gCriticalSection);
	   //離開臨界區
	  
	  if(bNewActive!=bOldActive)
	  {
		  bNewActive?InterlockedIncrement(&finder->m_ActiveCount):InterlockedDecrement(&finder->m_ActiveCount);
		  PostMessage(finder->m_MainhWnd,WM_THREADCOUNT,(WPARAM)finder->m_ActiveCount,NULL);
	  }
      else if(!bNewActive)continue;
       
      SendMessage(finder->m_MainhWnd,WM_FINDERFOLDER,(WPARAM)lpFolder,NULL);

       if(filefinder.FindFile(LPCTSTR(CurPath)))
	   {
		   do 
		   {
			   re=filefinder.FindNextFile();
			   if(filefinder.IsDots())continue;
			   PathStr=filefinder.GetFilePath();

			   if(filefinder.IsDirectory())
			   {
			       EnterCriticalSection(&finder->m_gCriticalSection);
				   finder->m_DirList.AddTail(PathStr);
				   LeaveCriticalSection(&finder->m_gCriticalSection);
			   }
			   else filelist.AddTail(PathStr);
		   }while(re);
	   }
	   while(!filelist.IsEmpty())
	   {
		   PathStr=filelist.RemoveHead();
		   if(finder->MatchProc(PathStr))
			   SendMessage(finder->m_MainhWnd,WM_FINDERITEM,(WPARAM)&PathStr,NULL);
	   }
   }
delete lpFolder;
filefinder.Close();
return 0;
}
//--------------------------------------------------------------------
BOOL __fastcall CRapidFinder::MatchProc(CString &findpath)
{
    CString fname(findpath);
    int pos=fname.ReverseFind('\\');
	fname.MakeUpper();
	if((m_Option&OP_FILENAME)&&(fname.Find(m_strFileName,pos+1)==-1))return false;
	if((m_Option&OP_FILETEXT)&&!FindTextFromFile(findpath))return false;
	return true;
}
BOOL __fastcall CRapidFinder::FindTextFromFile(CString &findpath)
{
    CFile file;
	if(NULL==file.Open(findpath.GetBuffer(0),CFile::modeRead|CFile::typeBinary))return false;
	BYTE *Buffer=new BYTE[512];
	int nRead;
	if(!(nRead=file.Read(Buffer,512))){file.Close();return false;}
	int i=0,j=0;

    while(j<m_TextSize)
	if(j==-1||Buffer[i]==m_lpText[j])	
	{	
	   if(++i==nRead)
	   {
		/*PeekAndPump();*/
       	if(!(nRead=file.Read(Buffer,512))){file.Close();return false;}
		i=0;
	   }
	   j++;
	}
	else j=m_NextVal[j];
    file.Close();
    return true;	
}
int*  CRapidFinder::CalNextPos()
{
 int j=0,k=-1;
  m_NextVal[0]=-1;
  while(j<m_TextSize-1)
	  if((k==-1)||(m_lpText[j]==m_lpText[k]))
	  {
		  j++;k++;
		  if(m_lpText[j]!=m_lpText[k])m_NextVal[j]=k;
		  else m_NextVal[j]=m_NextVal[k];
	  }
	  else k=m_NextVal[k];
  return m_NextVal;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜成人免费视频| 日本精品一区二区三区高清| eeuss鲁片一区二区三区 | 日韩一级精品视频在线观看| 久久看人人爽人人| 日产国产欧美视频一区精品| av一区二区久久| 久久亚洲欧美国产精品乐播| 日韩综合小视频| 日本韩国欧美在线| 亚洲国产激情av| 久久99国内精品| 91精品国产综合久久香蕉的特点| 综合网在线视频| 丁香网亚洲国际| 久久蜜臀精品av| 狠狠色丁香久久婷婷综合_中 | 99re8在线精品视频免费播放| 6080午夜不卡| 五月天一区二区| 欧美在线观看一区| 亚洲码国产岛国毛片在线| 国产99久久久国产精品免费看| 日韩欧美国产不卡| 偷拍与自拍一区| 欧美日韩国产美女| 亚洲成av人片在www色猫咪| 日本电影欧美片| 亚洲精品国产一区二区精华液| 丁香天五香天堂综合| 久久精品视频免费观看| 国产福利91精品一区| 久久精品夜夜夜夜久久| 国产69精品久久久久毛片| 2014亚洲片线观看视频免费| 韩国精品在线观看| 国产亚洲成年网址在线观看| 高清不卡一二三区| 中文字幕在线观看一区| 91欧美一区二区| 亚洲激情中文1区| 欧美性猛片aaaaaaa做受| 日本怡春院一区二区| 日韩一区二区三区免费看 | 成人精品一区二区三区中文字幕| 国产色91在线| 色哟哟国产精品免费观看| 国产美女娇喘av呻吟久久| 久久久不卡网国产精品一区| 成人性生交大片免费看中文网站| 1区2区3区国产精品| 欧美亚洲精品一区| 免费成人美女在线观看| 国产三级精品三级| 91蝌蚪porny| 男女激情视频一区| 国产欧美精品一区二区色综合 | 亚洲久草在线视频| 欧美电影在哪看比较好| 国产精品综合久久| 综合久久综合久久| 日韩免费高清电影| 99久久久免费精品国产一区二区| 亚洲午夜成aⅴ人片| 精品88久久久久88久久久| 91免费在线视频观看| 日本不卡不码高清免费观看| 国产日韩高清在线| 精品1区2区3区| 国产成人超碰人人澡人人澡| 亚洲一二三四区| 国产日韩精品视频一区| 欧美日韩电影在线播放| 粉嫩高潮美女一区二区三区| 亚洲一区二区三区视频在线播放| 久久综合狠狠综合| 欧美日韩免费一区二区三区视频| 黄色小说综合网站| 午夜精品久久久久久久久久| 国产日韩亚洲欧美综合| 这里只有精品视频在线观看| 91色.com| 黄色日韩网站视频| 日韩电影免费一区| 亚洲男人天堂av网| 国产婷婷一区二区| 日韩亚洲欧美高清| 欧美日韩免费一区二区三区 | 欧美日韩卡一卡二| 国产精品香蕉一区二区三区| 日韩在线一二三区| 亚洲综合一二三区| 欧美韩国日本一区| 精品国产伦一区二区三区免费| 精品视频资源站| 91久久久免费一区二区| 成人精品视频一区| 国产乱码精品一区二区三区av| 日韩国产高清在线| 午夜精品久久久久久久久久久| 日韩理论片一区二区| 国产精品乱人伦一区二区| 久久婷婷色综合| 欧美xfplay| 精品免费视频一区二区| 日韩欧美一区二区久久婷婷| 9191精品国产综合久久久久久| 色婷婷久久久久swag精品| 91麻豆精品在线观看| 成人激情小说网站| jizz一区二区| 欧美日韩一区二区在线观看| 在线视频你懂得一区| 色婷婷综合五月| 欧美在线免费观看亚洲| 欧美亚日韩国产aⅴ精品中极品| 99国产精品久| 91丨九色丨黑人外教| 91免费视频大全| 日本电影亚洲天堂一区| 欧美日韩亚洲丝袜制服| 欧美精品第1页| 欧美一区二区在线免费观看| 日韩一区二区三区四区五区六区| 91精品国产综合久久小美女| 欧美第一区第二区| 国产婷婷色一区二区三区在线| 国产精品天美传媒沈樵| 亚洲另类中文字| 天堂成人国产精品一区| 美女视频一区在线观看| 国产一区在线看| 99久久伊人久久99| 欧美日韩精品一区二区| 91精品国产一区二区三区蜜臀| 精品国产91久久久久久久妲己| 欧美精品一区二区三区高清aⅴ| 中文字幕国产一区| 亚洲一区二区五区| 奇米四色…亚洲| 成人三级伦理片| 欧美性欧美巨大黑白大战| 日韩一级高清毛片| 国产精品久久久久天堂| 亚洲小说春色综合另类电影| 蜜桃一区二区三区在线| 国产69精品久久777的优势| 日本丰满少妇一区二区三区| 日韩免费一区二区三区在线播放| 国产欧美一二三区| 亚洲妇女屁股眼交7| 国产一区二区不卡| 欧美一a一片一级一片| 日韩欧美国产电影| 一区二区三区免费| 精品一区二区三区视频| 色av综合在线| 久久精品人人爽人人爽| 亚洲午夜久久久久久久久电影网 | 日韩高清国产一区在线| 国产经典欧美精品| 911精品产国品一二三产区| 国产精品视频线看| 亚洲视频一区在线| 韩国理伦片一区二区三区在线播放 | 91影院在线观看| 欧美成人性战久久| 一区二区三区四区在线播放| 国产在线播放一区| 制服丝袜在线91| 亚洲制服丝袜在线| 成人福利视频网站| 精品国内片67194| 日韩制服丝袜先锋影音| 在线观看日韩一区| 久久精品亚洲精品国产欧美 | 亚洲成人av一区| 91年精品国产| 中文字幕亚洲成人| 福利视频网站一区二区三区| 2014亚洲片线观看视频免费| 日韩精品亚洲一区| 欧美人妇做爰xxxⅹ性高电影| 一区二区三区自拍| 日韩三级在线免费观看| 亚洲一区二区美女| 色综合久久久久综合体| 亚洲欧美视频在线观看视频| 成人网在线免费视频| 国产视频一区在线播放| 国产精品一区二区男女羞羞无遮挡| 日韩一区和二区| 毛片av一区二区| 日韩一区二区三区精品视频| 天天色天天操综合| 欧美美女bb生活片| 日韩福利电影在线观看| 日韩欧美中文字幕一区| 蜜桃视频在线观看一区| 久久这里只有精品首页|