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

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

?? mywin32port.cpp

?? 多線程
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/************************************************************************/
/* 類名稱:   串口操作類                                                 */
/* 功  能:   實現對串口的基本操作                                       */
/* 設計者:   Jinlong|Luo                                                */
/* 修訂記錄:                                                            */
/* 設計時間: 2007-9-24                                                  */
/************************************************************************/
#include<StdAfx.h>
#include "MyWin32Port.h"

//全局變量定義
CRITICAL_SECTION g_cslistReceiveInfoMutex;		  //接收隊列關鍵代碼段的同步變量
CList< CInfoCell, CInfoCell& > g_listReceiveInfo; //接收隊列

CFile m_ycDataFile;//遙測數據文件
/************************************************************************/
// 函數名稱: ReceiveThread()
// 函數描述: 接收線程
// 入口參數:                                                            
// 出口參數:         
// 返 回 值:    
// 其    它:                                                            
/************************************************************************/
UINT MyWin32Port::ReceiveThread( PVOID pParameter )
{
	MyWin32Port* pSerialPort = (MyWin32Port*)pParameter;
	ASSERT(pSerialPort->m_hCom != INVALID_HANDLE_VALUE);//檢測串口是否打開

	//清空串口
	PurgeComm(pSerialPort->m_hCom,PURGE_RXCLEAR | PURGE_TXCLEAR);

	if( pSerialPort->m_hCom )
		SetCommMask( pSerialPort->m_hCom, EV_RXCHAR );//輸入設備接受字符

	int   i=0;
	int   j=0;
	short   sCurLoc  = 0;//臨時緩沖區中的當前位置
	UWord16 wHead  = 0;
	DWORD dwReadNum = 0;
	char*	pSegment = NULL;
	CString strDateTime;
	CTime time = CTime::GetCurrentTime();	
	strDateTime.Format("%d-%d-%d",time.GetYear(),time.GetMonth(),time.GetDay());
	CString strFileName = "GPSData";
	strFileName+=strDateTime;
	strFileName+=".yc";
	BOOL bCreateFile = m_ycDataFile.Open(strFileName,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);

	while( TRUE )
	{
		//如果收到接收線程退出信號,則退出線程
		if (WaitForSingleObject(pSerialPort->m_hReceiveCloseEvent,500) == WAIT_OBJECT_0)
		{
			break;
		}

		//從串口讀取數據
		ReadFile( pSerialPort->m_hCom, pSerialPort->m_csRevBuf, RECEIVE_CHAR_BUFFER_MAX, &dwReadNum, NULL );	//讀字符
		pSerialPort->m_csRevBuf[dwReadNum] = '\0';
		if (dwReadNum<=0)  //dwReadNum<=0
		{
			Sleep(20);
			continue;
		}
	
		//保存當前數據
		if( bCreateFile )
		{
			m_ycDataFile.Write( pSerialPort->m_csRevBuf,dwReadNum);
		}

		//處理數據
		if (sCurLoc>(SERIAL_CHAR_BUFFER_MAX*2-dwReadNum))
		{
			sCurLoc = 0;//防止溢出
		}
		memcpy(&pSerialPort->m_csTempBuf[sCurLoc],&pSerialPort->m_csRevBuf[0],dwReadNum);//保存當前數據到臨時緩沖區中
		for (i=0;i<(dwReadNum+sCurLoc-1);i++)
		{
			wHead = (pSerialPort->m_csTempBuf[i]<<8) | pSerialPort->m_csTempBuf[i+1];
			if (0xEB90 == wHead)//幀同步頭
			{	
				if ((i+50)<=(dwReadNum+sCurLoc))//當前數據為一條完整的數據幀,遙測一幀數據為50byte
				{	
					if ((pSerialPort->m_csTempBuf[i+46]==0x55) && (pSerialPort->m_csTempBuf[i+47]==0x55)
						&& (pSerialPort->m_csTempBuf[i+48]==0x55) && (pSerialPort->m_csTempBuf[i+49]==0x55))//幀尾標志
					{
						EnterCriticalSection(&g_cslistReceiveInfoMutex);
						pSegment = (char*)&pSerialPort->m_csTempBuf[i];
						CInfoCell oCell(pSegment,50);					
						g_listReceiveInfo.AddTail(oCell);
						LeaveCriticalSection(&g_cslistReceiveInfoMutex);
						i+=49;
						j = i+1;
					}					
				}
			}
		}

		if (j<(dwReadNum+sCurLoc))//當前數據未處理完,保存不完整幀
		{
			sCurLoc = dwReadNum+sCurLoc-j;
			memmove(&pSerialPort->m_csTempBuf[0],&pSerialPort->m_csTempBuf[j],sCurLoc);
			j=0;
		}
		else//當前數據處理完畢
		{
			sCurLoc = 0;
			j = 0;
		}
		pSerialPort->m_csRevBuf[0] = '\0';	//接收緩沖區置空
	}


	return 0;
}
/************************************************************************/
// 函數名稱: InfoProcessThread()
// 函數描述: 信息處理線程
// 入口參數:                                                            
// 出口參數:         
// 返 回 值:    
// 其    它:                                                            
/************************************************************************/
UINT MyWin32Port::InfoProcessThread( PVOID pParameter )
{
	MyWin32Port* pSerialPort = (MyWin32Port*)pParameter;
	ASSERT(pSerialPort->m_hCom != INVALID_HANDLE_VALUE);
	int iCount = 0;

	//處理接收緩沖區中的數據
	while( true )
	{
		EnterCriticalSection( &g_cslistReceiveInfoMutex );
		iCount =  g_listReceiveInfo.GetCount();		
		while(iCount>0 )
		{			
			CInfoCell& oCell = g_listReceiveInfo.GetHead();
			pSerialPort->Process( oCell.csInfo, oCell.nLength );	//信息處理
			g_listReceiveInfo.RemoveHead();
			iCount =  g_listReceiveInfo.GetCount();
		}		
		LeaveCriticalSection( &g_cslistReceiveInfoMutex );

		//如果收到解析線程退出信號,則退出線程
		if (WaitForSingleObject(pSerialPort->m_hInfoProcessCloseEvent,500) == WAIT_OBJECT_0)
		{
			pSerialPort->m_hInfoProcessThread = NULL;
			break;
		}
		Sleep(10);
	}

	return 0;
}

/************************************************************************/
/* 構造/析構                                                            */
/************************************************************************/
MyWin32Port::MyWin32Port()
{

	//串口句柄
	m_hCom = INVALID_HANDLE_VALUE;

	//串口占用標示
	m_bIsOpen = FALSE;

	//窗口句柄
	m_hWnd  = NULL;     
	
	//接收線程句柄
	m_hReceiveThread = NULL;	

	//解析線程句柄
	m_hInfoProcessThread = NULL;

	//接收隊列關鍵代碼段的同步變量初始化
	InitializeCriticalSection(&g_cslistReceiveInfoMutex);	

	//當前解析的協議指令字符串
	m_pCurParsedContent = NULL;	

	//接收字符串緩沖區
	memset(m_csRevBuf,0,(SERIAL_CHAR_BUFFER_MAX+1)*sizeof(BYTE));
	
	//臨時緩沖區
	memset(m_csTempBuf,0,(SERIAL_CHAR_BUFFER_MAX*2+1)*sizeof(BYTE));


}
MyWin32Port::~MyWin32Port()
{
	//關閉串口
	if (m_bIsOpen)
	{
		CloseMyWin32Port();
		m_bIsOpen = FALSE;
	}

	//清除接收隊列關鍵代碼段的同步變量
	if ((NULL==m_hInfoProcessThread) && (NULL==m_hReceiveThread))
	{
		DeleteCriticalSection( &g_cslistReceiveInfoMutex );
	}

	//當前解析的協議指令字符串
	if (m_pCurParsedContent!=NULL)
	{
		delete m_pCurParsedContent;
		m_pCurParsedContent = NULL;
	}
}

/************************************************************************/
// 函數名稱: Open(HWND hWnd,char btID,long dwBaudRate, char btParity ,char btSize,
//				  char btStopBits,long ReadIntervalTimeout,long ReadTotalTimeoutMultiplier,
//				  long ReadTotalTimeoutConstant,long WriteTotalTimeoutMultiplier,
//			      long WriteTotalTimeoutConstant,long dwCommMask ) 
// 函數描述: 根據指定的參數打開串口并開啟串口讀、寫及解析線程           
// 入口參數:    
//           HWND     hWnd                傳入的窗口句柄                                                        
//           char     btID                待打開串口ID號 1--COM1:、2--COM2:...
//           long     dwBaudRate          待打開串口數據傳輸率 4800、9600、19200...
//           char     btParity            待打開串口奇偶校驗 默認為無校驗。
//           char     btSize              待打開串口數據位 默認為8 
//           char     btStopBits          待打開串口停止位 默認為1 
//			 long	  ReadIntervalTimeout 
//			 long     ReadTotalTimeoutMultiplier
//		     long	  ReadTotalTimeoutConstant
//			 long	  WriteTotalTimeoutMultiplier
//           long	  WriteTotalTimeoutConstant	 串口通訊占用端口超時結構參數
//           long     dwCommMask          待打開串口串口響應事件
// 出口參數:         
// 返 回 值: 串口打開成功或已打開,返回TRUE;否則返回FALSE     
// 其    它:                                                            
/************************************************************************/
BOOL MyWin32Port::OpenMyWin32Port(HWND hWnd,char btID,long dwBaudRate,  char btParity /* = NOPARITY */,char btSize /* = 8 */, 
					   char btStopBits /* = ONESTOPBIT */,long ReadIntervalTimeout, long ReadTotalTimeoutMultiplier,
					   long ReadTotalTimeoutConstant,long WriteTotalTimeoutMultiplier,
					   long WriteTotalTimeoutConstant,long dwCommMask /* = EV_RXCHAR|EV_TXEMPTY */)
{
	//打開串口
	DCB           dcb             ;
	long          dwError = 0     ;
	CString       szPort = _T("") ;
	COMMTIMEOUTS  CommTimeOuts    ;
	if( FALSE != m_bIsOpen )
	{
		AfxMessageBox(_T("串口已打開或未找到!")) ;
		return 0 ;
	}	
	szPort.Format("COM%d:",btID) ;// 確定待打開的串口名稱完整性(COM1:)		
	m_hCom = INVALID_HANDLE_VALUE ;// 設置串口通訊占用端口的句柄為占用模式
	m_hCom = CreateFile( szPort, 
		                  GENERIC_READ | GENERIC_WRITE, 
						  0, 
						  NULL, 
						  OPEN_EXISTING, 
						  FILE_ATTRIBUTE_NORMAL, 
						  NULL ) ;// 根據輸入的串口通訊參數打開串口


	if( INVALID_HANDLE_VALUE == m_hCom )
	{
		return FALSE ;	
	}
	// 設置串口通訊占用端口超時結構參數
	CommTimeOuts.ReadIntervalTimeout         = 0xFFFFFFFF ;
	CommTimeOuts.ReadTotalTimeoutMultiplier  = 0          ;
	CommTimeOuts.ReadTotalTimeoutConstant    = 0          ;
	CommTimeOuts.WriteTotalTimeoutMultiplier = 0          ;
	CommTimeOuts.WriteTotalTimeoutConstant   = 5000       ;

	// 設置串口通訊占用端口超時結構
	SetCommTimeouts(m_hCom,&CommTimeOuts) ;

	// 設置串口通訊占用端口DCB結構
	dcb.DCBlength = sizeof( DCB ) ;
	GetCommState( m_hCom, &dcb ) ;
	dcb.BaudRate  = dwBaudRate    ;
	dcb.ByteSize  = btSize        ;
	if (1==btStopBits)
	{
		dcb.StopBits = ONESTOPBIT;
	}
	else if (2== btStopBits)
	{
		dcb.StopBits = TWOSTOPBITS;
	}
	else if (5 == btStopBits)
	{
		dcb.StopBits = ONE5STOPBITS;
	}
	else
	{
		dcb.StopBits = ONESTOPBIT;
	}
	switch(btParity)
	{
	case 'N':  //無奇偶校驗位
		dcb.Parity = NOPARITY;
		break;
	case 'O':
		dcb.Parity = ODDPARITY;
		break;
	case 'E':
		dcb.Parity = EVENPARITY;
		break;
	case 'M':
		dcb.Parity = MARKPARITY;
		break;
	case 'S':
		dcb.Parity = SPACEPARITY;
		break;
	default:
		dcb.Parity    = NOPARITY ;
		break;
	}
	
	// 如果設置串口通訊占用端口選項參數失敗直接返回FALSE
	if( 0 == SetCommState(m_hCom,&dcb) || 0 == SetupComm(m_hCom,10000,10000) || 0 == SetCommMask(m_hCom,dwCommMask) )
	{
		// 獲取錯誤標示
		dwError = GetLastError() ;

		// 關閉串口通訊并釋放其占用端口
		m_hWnd = NULL;

		CloseMyWin32Port() ;

		return FALSE ;
	}

	// 清空串口通訊占用端口的緩沖區
	PurgeComm(m_hCom,PURGE_RXCLEAR|PURGE_TXCLEAR|PURGE_RXABORT|PURGE_TXABORT) ;

	//啟動接收線程
	if (!StartReceiveThread())
	{
		CloseMyWin32Port() ;//關閉串口

		return FALSE;
	}
	 
	//啟動解析線程
	if (!StartInfoProcessThread())
	{
		CloseMyWin32Port() ;//關閉串口

		return FALSE;
	}

	// 設置串口通訊是否占用端口的標識
	m_hWnd = hWnd ;
	m_bIsOpen = TRUE ;
	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91国在线观看| 国产一区啦啦啦在线观看| 美女任你摸久久| 成人黄色国产精品网站大全在线免费观看 | 成人黄动漫网站免费app| 91女人视频在线观看| 91精品免费观看| 中文字幕av不卡| 日韩精彩视频在线观看| 国产精品一区二区三区乱码| 91福利区一区二区三区| 久久亚洲捆绑美女| 一区二区三区在线视频播放 | 久久综合久久综合亚洲| 国产精品国产三级国产普通话99 | 欧美一区二区三区四区视频| 国产欧美一区二区三区在线老狼| 一区二区在线观看视频| 久久99久久99| 在线看国产一区| 精品播放一区二区| 一区二区三区四区亚洲| 国产一区二区三区四区五区入口| 99re6这里只有精品视频在线观看| 日韩午夜av电影| 亚洲免费av高清| 国产九色精品成人porny| 色偷偷一区二区三区| 欧美精品xxxxbbbb| 亚洲欧洲精品一区二区精品久久久 | www.欧美色图| 精品区一区二区| 亚洲va国产天堂va久久en| 北岛玲一区二区三区四区| 日韩精品一区二| 亚洲成人手机在线| 色综合中文字幕国产 | 国产成人在线视频网站| 67194成人在线观看| 亚洲综合区在线| 成人黄色软件下载| 久久九九久久九九| 欧美aa在线视频| 欧美日韩不卡一区二区| 1024亚洲合集| 成人av网址在线| 国产亚洲欧美日韩俺去了| 奇米影视在线99精品| 欧美影院精品一区| 亚洲视频在线一区| www.欧美日韩| 国产精品大尺度| 丁香桃色午夜亚洲一区二区三区| 精品剧情在线观看| 日本va欧美va瓶| 91超碰这里只有精品国产| 亚洲第一成人在线| 欧美在线一二三| 亚洲一区二区三区爽爽爽爽爽| 91麻豆国产精品久久| 国产精品久久看| 成人午夜伦理影院| 欧美精彩视频一区二区三区| 国产精品乡下勾搭老头1| 久久久国产午夜精品| 国产一区亚洲一区| 久久精品亚洲乱码伦伦中文| 国产精品一区在线| 久久精品人人做人人爽97| 激情久久久久久久久久久久久久久久| 91精品婷婷国产综合久久竹菊| 亚洲成人精品一区| 欧美日韩国产高清一区二区| 香蕉成人啪国产精品视频综合网| 欧美精品色综合| 美女视频黄a大片欧美| 精品91自产拍在线观看一区| 看片的网站亚洲| 亚洲精品一线二线三线无人区| 精品在线观看视频| 久久久精品免费免费| 福利视频网站一区二区三区| 中文字幕av不卡| 一本色道亚洲精品aⅴ| 亚洲一区二区三区四区的| 欧美日韩精品欧美日韩精品一| 无吗不卡中文字幕| 精品久久久久久最新网址| 国产成人99久久亚洲综合精品| 国产欧美精品一区| 一本久久综合亚洲鲁鲁五月天| 亚洲一区二区三区免费视频| 欧美一区二区三区视频免费| 国产一区二区三区在线观看免费视频| 国产女主播在线一区二区| 91在线精品一区二区三区| 亚洲国产一区视频| 精品卡一卡二卡三卡四在线| 成人午夜免费电影| 亚洲午夜一区二区| 日韩欧美国产精品一区| 国产精品亚洲专一区二区三区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 欧美日韩一级视频| 国产在线视频一区二区三区| 国产精品欧美一级免费| 在线观看欧美黄色| 美洲天堂一区二卡三卡四卡视频| 国产欧美日韩在线| 欧洲人成人精品| 国精产品一区一区三区mba视频 | 在线观看一区二区视频| 奇米在线7777在线精品| 欧美国产日产图区| 欧美日韩国产一级二级| 国产精品一区一区| 亚洲国产欧美一区二区三区丁香婷| 日韩精品一区二区三区四区视频| 成人自拍视频在线观看| 天堂午夜影视日韩欧美一区二区| 久久这里只有精品6| 色素色在线综合| 国内不卡的二区三区中文字幕| 亚洲欧美在线视频| 精品欧美一区二区三区精品久久| 91香蕉视频在线| 久久精品免费观看| 亚洲激情自拍视频| 国产亚洲一区二区三区四区| 欧美日韩在线不卡| 99这里只有精品| 久久电影网站中文字幕| 一区二区成人在线视频| 国产欧美一区在线| 在线成人高清不卡| 97成人超碰视| 国产一区二区视频在线| 午夜精品福利久久久| 国产精品免费av| 久久这里都是精品| 欧美一区二区免费视频| 91麻豆免费在线观看| 国产成人aaaa| 狠狠狠色丁香婷婷综合久久五月| 亚洲综合色丁香婷婷六月图片| 国产精品免费丝袜| 久久―日本道色综合久久| 91麻豆精品国产91久久久久久久久| 99国产麻豆精品| 丁香婷婷综合五月| 国内一区二区在线| 蜜臀av亚洲一区中文字幕| 亚洲制服丝袜av| 中文字幕日韩精品一区| 国产欧美日韩一区二区三区在线观看| 日韩一级二级三级精品视频| 91黄色免费看| 9久草视频在线视频精品| 成人一区二区三区| 国产老妇另类xxxxx| 久久精品99国产精品日本| 午夜av一区二区三区| 亚洲一区二区三区在线播放| 亚洲青青青在线视频| 日韩美女精品在线| 国产精品久久久久久一区二区三区| 久久久久久久久一| 精品久久久久av影院| 日韩精品一区二区三区老鸭窝 | 精品亚洲成a人在线观看| 性做久久久久久久免费看| 亚洲成在人线在线播放| 亚洲国产cao| 亚洲成人资源网| 亚洲123区在线观看| 亚洲成人免费影院| 石原莉奈在线亚洲二区| 日韩精品视频网站| 免费xxxx性欧美18vr| 日韩va欧美va亚洲va久久| 日本一区中文字幕| 一区二区三区自拍| 亚洲成人综合网站| 天天色综合天天| 美女视频免费一区| 国产乱码精品一区二区三区五月婷| 精品无人区卡一卡二卡三乱码免费卡| 精品在线播放午夜| 国产成人自拍高清视频在线免费播放| 国产成人免费9x9x人网站视频| 成人晚上爱看视频| 91免费版在线| 欧美精品在线视频| 日韩亚洲电影在线| 久久久久久久久99精品| 中文字幕中文在线不卡住| 一区二区三区精品在线| 日韩精品高清不卡| 国模无码大尺度一区二区三区| 国产成人精品免费在线|