⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档.txt

📁 电子监控的网络编程实例
💻 TXT
字号:
回掉函数
int WINAPI cb_FindCar(int iChanel)
{
	try{
			BYTE iNum = MyPathCfg.GetSize();
	for(int i=0;i<iNum;i++)
	{
		if(((CFireCls*)MyPathCfg[i])->vNear-1==iChanel)
		{
			((CFireCls*)MyPathCfg[i])->CapNearOk=TRUE;
			((CFireCls*)MyPathCfg[i])->CapStartTime=GetTickCount();
			
			if(TWOWAY)
			{
				int fly1=(int)pow(2,((CFireCls*)MyPathCfg[i])->vThree-1);
				int* pfly = VC_CapImgToCard(fly1);
				if(pfly)
					((CFireCls*)MyPathCfg[i])->MilBuffThree = *(pfly+((CFireCls*)MyPathCfg[i])->vThree-1);
				else
					((CFireCls*)MyPathCfg[i])->MilBuffThree = -1;
			
				if(((CFireCls*)MyPathCfg[i])->MilBuffThree<0)
					((CFireCls*)MyPathCfg[i])->CapThreeOk=FALSE;
				else
					((CFireCls*)MyPathCfg[i])->CapThreeOk=TRUE;	
			}

			int fly1=(int)pow(2,((CFireCls*)MyPathCfg[i])->vFar-1);
			int* pfly = VC_CapImgToCard(fly1);
			if(pfly)
				((CFireCls*)MyPathCfg[i])->MilBuffFar = *(pfly+((CFireCls*)MyPathCfg[i])->vFar-1);
			else
				((CFireCls*)MyPathCfg[i])->MilBuffFar = -1;

			if(((CFireCls*)MyPathCfg[i])->MilBuffFar<0)
			{
				((CFireCls*)MyPathCfg[i])->CapFarOk=FALSE;
			}
			else
				((CFireCls*)MyPathCfg[i])->CapFarOk=TRUE;

			
			if(ADDTAIL)
			{
				int fly1=(int)pow(2,((CFireCls*)MyPathCfg[i])->vTail-1);
				int* pfly = VC_CapImgToCard(fly1);
				if(pfly)
					((CFireCls*)MyPathCfg[i])->MilBuffTail = *(pfly+((CFireCls*)MyPathCfg[i])->vTail-1);
				else
					((CFireCls*)MyPathCfg[i])->MilBuffTail = -1;

				if(((CFireCls*)MyPathCfg[i])->MilBuffTail<0)
					
			//	if(VC_CaptureImage(PBYTE(m_hImgTail),((CFireCls*)MyPathCfg[i])->vTail-1, TRUE)<0)
					((CFireCls*)MyPathCfg[i])->CapTailOk=FALSE;
				else
					((CFireCls*)MyPathCfg[i])->CapTailOk=TRUE;	
			}
			

			   int BuffIndex;
	BuffIndex=VC_GetFreeBuffIndex(); 
	if (BuffIndex==-1)
	{	
		VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[i])->MilBuffNear);
		VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[i])->MilBuffFar);
		VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[i])->MilBuffTail);
		VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[i])->MilBuffThree);

		WriteErrorRec("图像缓存用完!",1);
		NoneImgBuff++;
		if(NoneImgBuff>40)
		{
			CMainFrame * myApp;
			CQkjkView * myDlg;
			myApp=(CMainFrame *)AfxGetApp()->m_pMainWnd;
			if (myApp!=NULL) 
			{
				myDlg = (CQkjkView *)myApp->GetActiveView();
				if(myDlg!=NULL)
				{
					WriteErrorRec("处理程序无法正常运行,重新启动计算机!",2);
					myDlg->CapRestart=TRUE;
					myDlg->PostMessage(WM_CLOSE,0,0);
				}
				else
				{	WriteErrorRec("出错!",0);
				iCapError++;
				if(iCapError>20)
					ReStartWindows();
				}	
			}
			else
			{
				WriteErrorRec("出错2!",0);
				iCapError++;
				if(iCapError>20)
					ReStartWindows();
			}
		}
		else
		{	
			NoneImgBuff++;
		
		}

	}
	else
	{
		NoneImgBuff=0;
		//A	SetBuffUseState(BuffIndex); 
		CProcessCls *tmp=new CProcessCls;
		tmp->BuffIndex=BuffIndex;
		if (tmp==NULL)	    return -1;					  
		tmp->PathNum=i;
		tmp->VehClr=3; 
		tmp->VehSd=0;
		tmp->VehType=0;
		tmp->bNiXing =FALSE;
		tmp->lpn="";
		tmp->bVideoExits=TRUE;
		if (((CFireCls*)MyPathCfg[i])->CapNearOk)
		{
			g_uSuNum[i]++;//抓拍成功计数
			
			tmp->MilBuffNear=((CFireCls*)MyPathCfg[i])->MilBuffNear; 
			tmp->CapNearOk =((CFireCls*)MyPathCfg[i])->CapNearOk;
		}
		
		
		/************************************************************************/
		/*同向两车道                                                                      */
		/************************************************************************/		
		if(TWOWAY) 
		{
			if (((CFireCls*)MyPathCfg[i])->CapThreeOk)
			{
				
				tmp->MilBuffThree=((CFireCls*)MyPathCfg[i])->MilBuffThree; 
				tmp->CapThreeOk =((CFireCls*)MyPathCfg[i])->CapThreeOk;
				
			}
		}
		/************************************************************************/
		
		
		if (((CFireCls*)MyPathCfg[i])->CapFarOk)
		{
			
			tmp->MilBuffFar=((CFireCls*)MyPathCfg[i])->MilBuffFar; 
			tmp->CapFarOk =((CFireCls*)MyPathCfg[i])->CapFarOk;
			
		}
		
		if( ADDTAIL )
		{
			if (((CFireCls*)MyPathCfg[i])->CapTailOk)
			{
				
				tmp->MilBuffTail=((CFireCls*)MyPathCfg[i])->MilBuffTail; 
				tmp->CapTailOk =((CFireCls*)MyPathCfg[i])->CapTailOk;
				
			}
		}
		tmp->CapTime=COleDateTime::GetCurrentTime();  
		((CFireCls*)MyPathCfg[i])->CapFarOk=FALSE;
		((CFireCls*)MyPathCfg[i])->CapNearOk=FALSE;
		((CFireCls*)MyPathCfg[i])->CapThreeOk=FALSE;
		((CFireCls*)MyPathCfg[i])->EnterFirst=FALSE;
		((CFireCls*)MyPathCfg[i])->MilBuffFar=-1;
		((CFireCls*)MyPathCfg[i])->MilBuffNear=-1;
		((CFireCls*)MyPathCfg[i])->MilBuffTail=-1;
		((CFireCls*)MyPathCfg[i])->MilBuffThree=-1;

		((CFireCls*)MyPathCfg[i])->Spd=0;
		((CFireCls*)MyPathCfg[i])->VehType=0;
		((CFireCls*)MyPathCfg[i])->EnterTime =0;
		((CFireCls*)MyPathCfg[i])->LastProcessTime =GetTickCount();
		tmp->CapPastTme= ((CFireCls*)MyPathCfg[i])->CapStartTime;
		//	TRACE("Enter my critical section!\n");
		EnterCriticalSection(&MyCritSec); 
		
		MyProcess.AddTail(tmp);
		LeaveCriticalSection(&MyCritSec);
		//	TRACE("Leave my critical section!\n");
		SetEvent(hProcessNotify);

	}
			break;
			
		}
			
	}
	}catch (...) {
		WriteErrorRec("cb_FindCar",0);
	}





	return 0;
}


//视频检测县城
UINT VideoExitsThread(LPVOID lpData)
{
	WriteErrorRec("视频检测线程开启",0);
	if(!lpData)
	{
		bUsedVideo[0] = FALSE;
		bUsedVideo[1] = FALSE;
		WriteErrorRec("视频检测线程关闭--err",0);
		return 1;
	}
	BYTE PNum=MyPathCfg.GetSize();
	VIDEOEXITS* pVE=(VIDEOEXITS*)lpData;
	int iRoad = pVE->iRoad;
	if(iRoad==1)
		bUsedVideo[0] = TRUE;
	else if(iRoad==2)
		bUsedVideo[1] = TRUE;
	else
	{
		bUsedVideo[0] = FALSE;
		bUsedVideo[1] = FALSE;
		WriteErrorRec("视频检测线程关闭--err",0);
		return 2;
	}
	
	if (MyPathCfg[0]==NULL)
	{
		bUsedVideo[0] = FALSE;
		bUsedVideo[1] = FALSE;
		WriteErrorRec("视频检测线程关闭--err",0);
		return 6;
	}	


	
	while(!pVE->bExit)
	{
		try{
			try{
				try{
					int fly1=(int)pow(2,pVE->iChanel[pVE->iRoad-1]);
					int* pfly = VC_CapImgToCard(fly1);//
					if(pfly)
						((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear = *(pfly+pVE->iChanel[pVE->iRoad-1]);
					else
					{
						WriteLog("MilBufNear=NULL",0);
						((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear = -1;		
					}
				}catch (...) {
					WriteErrorRec("Adlink-GetBuf0",0);
					VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear);								
					continue;
				}
				try{
					if(((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear>=0)
					{
						((CFireCls*)MyPathCfg[pVE->iRoad-1])->CapNearOk = TRUE;
						try{
							VC_GetBufFromCard(&(((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear),PBYTE(m_hImgVideo),false,"",false);						
						}catch(...) {
							WriteErrorRec("Adlink-GetBuf1",0);
							VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear);								
							continue;
						}
					}
					else
					{
						WriteErrorRec("Adlink-CapFailed",0);
						((CFireCls*)MyPathCfg[pVE->iRoad-1])->CapNearOk = FALSE;
						VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear);	
						continue;
					}
				}catch(...){
					((CFireCls*)MyPathCfg[pVE->iRoad-1])->CapNearOk = FALSE;
					VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear);						
					WriteErrorRec("Adlink-GetBuf2",0);						
					continue;
				}
				
				
				try{
					if(((CFireCls*)MyPathCfg[pVE->iRoad-1])->CapNearOk){
						//	int iRst=VC_CaptureImage(PBYTE(m_hImgVideo),pVE->iChanel[pVE->iRoad-1]);
						if(ve_CheckCar(PBYTE(m_hImgVideo))<=0)
							VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear);
						if(theApp.pRectWnd && !pVE->bExit)
						{
							RECT vRect;
							CDC* pDC=theApp.pRectWnd->GetDlgItem(IDC_VIDEO)->GetDC();
							theApp.pRectWnd->GetDlgItem(IDC_VIDEO)->GetClientRect(&vRect);
							
							
							//	CopyMemory(&vRect, &(pVE->vRect[0]), sizeof(RECT));
							HDC hDC=pDC->GetSafeHdc();
							ve_Draw(PBYTE(m_hImgVideo),hDC,vRect.left,vRect.top ,vRect.right-vRect.left,vRect.bottom-vRect.top);
							theApp.pRectWnd->ReleaseDC(pDC);
						}
					}
				}catch(...){
					VC_ResetBuffUseState(&((CFireCls*)MyPathCfg[pVE->iRoad-1])->MilBuffNear);				
					WriteErrorRec("Adlink-GetBuf3",0);						
					continue;
				}
				
			}
			catch(...)
			{
			}
		}catch(...){
			WriteErrorRec("VideoExits",0);
		}
	
	}

	bUsedVideo[0] = FALSE;
	bUsedVideo[1] = FALSE;
	WriteErrorRec("视频检测线程关闭",0);
	return 0;

}

开启
	if(0!=ve_Init(cb_FindCar,1,HM_IMGWIDTH*HM_IMGHEIGHT*3+54,g_ve.dwMinTwoCapTime,g_ve.dwMaxCapTime))
	{
		WriteErrorRec("视频检测模块初始化失败",2);
	}

///开始
				int road = 2;
				g_ve.iRoad = road;
				g_ve.iChanel[road-1] = ((CFireCls*)MyPathCfg[road-1])->vNear-1;
				ve_SetShowRect(true, 255);
				ve_SetExitsParams(0,((CFireCls*)MyPathCfg[road-1])->vNear-1, g_ve.eRect[road-1].left,g_ve.eRect[road-1].top,g_ve.eRect[road-1].right,g_ve.eRect[road-1].bottom,g_ve.iGray[road-1],g_ve.iDif[road-1],g_ve.dwMinTwoCapTime);
				AfxBeginThread(VideoExitsThread,&g_ve);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -