亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日本三级韩国三级欧美三级| 欧美成人性战久久| 欧美日韩极品在线观看一区| 亚洲精品写真福利| 午夜精品福利久久久| 国产成人精品三级麻豆| 欧美一区二区三区人| 天天影视网天天综合色在线播放| 91福利在线看| 久久久精品免费观看| 美腿丝袜一区二区三区| 欧美成人官网二区| 日本最新不卡在线| 成人国产精品免费观看视频| 欧美精品乱码久久久久久| 天堂午夜影视日韩欧美一区二区| 欧美三级在线视频| 中文字幕一区av| 国产麻豆视频一区二区| 欧美日韩日日摸| 卡一卡二国产精品 | 久久电影网站中文字幕| 久久超碰97中文字幕| 婷婷丁香激情综合| 五月天网站亚洲| 国产精品白丝jk黑袜喷水| 亚洲成人午夜影院| √…a在线天堂一区| 中文字幕亚洲不卡| 日韩欧美专区在线| 欧美性做爰猛烈叫床潮| 国产精品区一区二区三区| 精品久久久久99| 91精品国产一区二区三区香蕉| 欧美一区二区三区免费大片| 精品一区二区三区在线观看| 国产制服丝袜一区| 国产宾馆实践打屁股91| 色88888久久久久久影院按摩| 欧美在线999| 日韩欧美视频在线| 国产精品黄色在线观看| 亚洲国产精品久久久男人的天堂| 乱中年女人伦av一区二区| 国产成人亚洲综合色影视| 欧美性生活久久| 欧美tickle裸体挠脚心vk| 国产精品狼人久久影院观看方式| 亚洲影视资源网| 狠狠久久亚洲欧美| 欧美在线制服丝袜| 精品成人免费观看| 一区二区三区 在线观看视频| 免费高清在线一区| gogogo免费视频观看亚洲一| 欧美人妇做爰xxxⅹ性高电影| 久久久青草青青国产亚洲免观| 亚洲一区二区三区影院| 国产在线播放一区| 欧美性xxxxx极品少妇| 久久久久国产免费免费| 性久久久久久久| 99久久精品国产网站| 欧美一级视频精品观看| 亚洲欧洲综合另类在线| 国产精品一线二线三线| 欧美一区欧美二区| 亚洲国产精品久久一线不卡| 欧美成人性战久久| 精品国产网站在线观看| 亚洲精品一二三四区| 久久国产福利国产秒拍| 色综合久久88色综合天天| 久久午夜免费电影| 首页欧美精品中文字幕| 日韩精品一区二区三区在线观看| 久久精品亚洲麻豆av一区二区 | 亚洲6080在线| 成人aa视频在线观看| 精品少妇一区二区三区| 亚洲精品乱码久久久久久久久| 国内久久精品视频| 91精品国产91久久综合桃花| 中文字幕一区二区视频| 国产精品一区二区三区网站| 欧美日韩一区精品| 国产精品黄色在线观看 | 欧美美女黄视频| 亚洲嫩草精品久久| 成人深夜在线观看| 久久综合久色欧美综合狠狠| 天天操天天色综合| 欧美性猛片aaaaaaa做受| 国产精品久久久久久久久动漫| 国产一区在线精品| 日韩欧美www| 麻豆精品在线视频| 这里只有精品电影| 午夜av一区二区三区| 欧美在线观看视频在线| 亚洲人成网站色在线观看| 成人免费黄色大片| 国产清纯美女被跳蛋高潮一区二区久久w | 久久精品国产免费| 欧美一区二区三区电影| 秋霞电影一区二区| 在线播放中文一区| 天堂成人免费av电影一区| 欧美性大战久久久久久久| 亚洲一区二区中文在线| 色狠狠色狠狠综合| 一区二区三区在线看| 欧美在线免费视屏| 亚洲va国产va欧美va观看| 欧美久久久久久蜜桃| 视频在线观看国产精品| 欧美一区二区精品在线| 裸体在线国模精品偷拍| 精品99久久久久久| 国产精品一级片在线观看| 久久久不卡网国产精品一区| 国产成人鲁色资源国产91色综 | 久久亚洲精华国产精华液 | 国产成人综合在线播放| 欧美国产精品中文字幕| 99免费精品视频| 亚洲综合色视频| 91精品国产高清一区二区三区 | 91精品国产欧美一区二区18| 免费人成在线不卡| 国产亚洲欧美激情| 成人ar影院免费观看视频| 亚洲精品中文字幕在线观看| 欧美日韩一级黄| 久久99精品国产91久久来源| 久久综合狠狠综合| 91在线视频免费91| 香蕉久久一区二区不卡无毒影院| 日韩色视频在线观看| 粉嫩在线一区二区三区视频| 亚洲男同1069视频| 日韩一区二区三区免费看| 国产精品资源在线| 亚洲品质自拍视频网站| 日韩一本二本av| 成人国产精品视频| 爽好多水快深点欧美视频| 国产日韩欧美在线一区| 色伊人久久综合中文字幕| 亚洲成a天堂v人片| 国产喷白浆一区二区三区| 色天使色偷偷av一区二区| 日本不卡在线视频| 国产精品嫩草影院av蜜臀| 在线视频国产一区| 精品一区二区综合| 亚洲免费在线观看视频| 日韩视频免费观看高清完整版| 成人激情午夜影院| 日韩国产欧美视频| 中文字幕在线观看不卡| 91麻豆精品国产自产在线 | 99久久国产综合精品麻豆| 日韩国产精品久久久久久亚洲| 国产精品午夜在线观看| 欧美精选一区二区| bt欧美亚洲午夜电影天堂| 蜜桃精品视频在线| 国产精品短视频| 大桥未久av一区二区三区中文| 欧美日韩在线免费视频| 一区二区三区91| 欧美三日本三级三级在线播放| 精品视频一区二区不卡| 中文字幕在线不卡国产视频| 亚洲视频一区在线观看| 风间由美性色一区二区三区| 色老头久久综合| 精品91自产拍在线观看一区| 国产精品美女久久久久高潮| 丝袜美腿成人在线| 欧美三区在线观看| 一区二区在线观看免费视频播放| 亚洲人成7777| 精品在线免费视频| 欧美艳星brazzers| 日韩国产在线一| 精品入口麻豆88视频| 91九色最新地址| av中文字幕一区| 国产成人亚洲综合a∨猫咪| 日韩专区中文字幕一区二区| 亚洲人成网站精品片在线观看| 欧美韩国日本不卡| 国产精品视频一二三| 欧美精品一区二区三区一线天视频 | 日韩美女一区二区三区| 欧美酷刑日本凌虐凌虐| 91福利在线观看| 色综合天天综合色综合av|