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

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

?? mywin32port.cpp

?? 多線程
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/************************************************************************/
// 函數名稱: OpenMyWin32Port(HWND hWnd,CString szPort,long dwBaudRate, char btParity ,char btSize,
//				  char btStopBits,long ReadIntervalTimeout,long ReadTotalTimeoutMultiplier,
//				  long ReadTotalTimeoutConstant,long WriteTotalTimeoutMultiplier,
//			      long WriteTotalTimeoutConstant,long dwCommMask ) 
// 函數描述: 根據指定的參數打開串口并開啟串口讀、寫及解析線程           
// 入口參數:                                                            
//           HWND     hWnd                傳入的窗口句柄                                                        
//           CString  szPort              待打開串口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,CString szPort,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  ;
	COMMTIMEOUTS  CommTimeOuts ;

	// 判斷待打開的串口是否已經被占用
	if( FALSE != m_bIsOpen )
	{
		AfxMessageBox("串口已打開或未找到!") ;
		return FALSE ;
	}

	// 確定待打開的串口名稱完整性(COM1:)
	if( _T( ":" ) != szPort.Right(1) )
	{
		szPort += _T( ":" ) ;
	}

	// 設置串口通訊占用端口的句柄為占用模式
	m_hCom = INVALID_HANDLE_VALUE ;

	// 根據輸入的串口通訊參數打開串口
	m_hCom = CreateFile(  szPort, 
		                  GENERIC_READ | GENERIC_WRITE, 
						  0, 
						  NULL, 
						  OPEN_EXISTING, 
						  FILE_ATTRIBUTE_NORMAL, 
						  NULL ) ;

	// 如果打開串口失敗返回0
	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;
	}

	// 如果設置串口通訊占用端口選項參數失敗直接返回0
	if( 0 == SetCommState(m_hCom,&dcb) || 0 == SetupComm(m_hCom,10000,10000) || 0 == SetCommMask(m_hCom,dwCommMask) )
	{
		// 獲取錯誤標示
		dwError = GetLastError() ;

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

		CloseMyWin32Port() ;

		return 0 ;
	}

	// 清空串口通訊占用端口的緩沖區
	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;
}
/************************************************************************/
// 函數名稱: CloseMyWin32Port()
// 函數描述: 關閉串口
// 入口參數:                                                            
// 出口參數:         
// 返 回 值:      
// 其    它:                                                            
/************************************************************************/
void MyWin32Port::CloseMyWin32Port()
{
	// 如果當前串口通訊未占用任何端口則直接返回
	if (INVALID_HANDLE_VALUE == m_hCom )
	{
		return ;
	}

	//終止接收線程
	EndReceiveThread();
	
	//終止解析線程
	EndInfoProcessThread();

	//清空接收隊列
	EnterCriticalSection( &g_cslistReceiveInfoMutex );
	if (g_listReceiveInfo.GetCount()>0)
	{
		g_listReceiveInfo.RemoveAll();
	}
	LeaveCriticalSection( &g_cslistReceiveInfoMutex );

	// 關閉串口通訊占用端口的句柄
	if (!CloseHandle(m_hCom))
	{
		// 設置串口通訊占用端口的句柄
		m_hCom = INVALID_HANDLE_VALUE ;
	}

	// 初始化串口通訊是否占用端口的標識
	m_bIsOpen = FALSE ;


	return;
	
}
/************************************************************************/
// 函數名稱: StartReceiveThread()
// 函數描述: 啟動接收線程
// 入口參數:                                                            
// 出口參數:         
// 返 回 值: 啟動成功返回TRUE;否則返回FALSE     
// 其    它:                                                            
/************************************************************************/
BOOL MyWin32Port::StartReceiveThread()
{
	//啟動工作線程
	m_hReceiveThread = AfxBeginThread(ReceiveThread,this);

	if( m_hReceiveThread == NULL )
	{
		TRACE( _T("啟動接收線程失敗,錯誤號:%d"), GetLastError() );
		return FALSE;
	}

	return TRUE;
}
/************************************************************************/
// 函數名稱: EndReceiveThread()
// 函數描述: 終止接收線程
// 入口參數:                                                            
// 出口參數:         
// 返 回 值: 成功返回TRUE;否則返回FALSE     
// 其    它:                                                            
/************************************************************************/
BOOL MyWin32Port::EndReceiveThread()
{
	if (NULL==m_hReceiveThread)
	{
		return FALSE;
	}
	//設置接收線程終止事件
	SetEvent(m_hReceiveCloseEvent);
	//設置所有事件無效
	SetCommMask(m_hCom,0);
	//清空所有將要讀的數據
	PurgeComm(m_hCom,PURGE_RXCLEAR);
	//等待10秒,如果接收線程沒有退出,則強制退出
	if (WaitForSingleObject(m_hReceiveThread,10000) == WAIT_TIMEOUT)
	{
		TerminateThread(m_hReceiveThread,0);
	}
	//置標志
	m_hReceiveThread = NULL;
	
	return TRUE;
}
/************************************************************************/
// 函數名稱: StartInfoProcessThread()
// 函數描述: 啟動解析線程
// 入口參數:                                                            
// 出口參數:         
// 返 回 值: 啟動成功返回TRUE;否則返回FALSE     
// 其    它:                                                            
/************************************************************************/
BOOL MyWin32Port::StartInfoProcessThread()
{
	m_hInfoProcessThread = AfxBeginThread(InfoProcessThread,this);
	if (NULL == m_hInfoProcessThread)
	{
		TRACE(_T("啟動解析線程失敗,錯誤號:%d"),GetLastError());
		return FALSE;
	}
	return TRUE;
}
/************************************************************************/
// 函數名稱: EndInfoProcessThread()
// 函數描述: 終止解析線程
// 入口參數:                                                            
// 出口參數:         
// 返 回 值: 成功返回TRUE;否則返回FALSE     
// 其    它:                                                            
/************************************************************************/
BOOL MyWin32Port::EndInfoProcessThread()
{
	if (NULL==m_hInfoProcessThread)
	{
		return FALSE;
	}
	//設置解析線程退出事件
	SetEvent(m_hInfoProcessCloseEvent);

	//等待10秒,如果解析線程沒有退出,則強制退出
	if (WaitForSingleObject(m_hInfoProcessThread,10000) == WAIT_TIMEOUT)
	{
		TerminateThread(m_hInfoProcessThread,0);
	}
	
	//置標志
	m_hInfoProcessThread = NULL;

	return TRUE;
}
/************************************************************************/
// 函數名稱: Process( char* pContent, int nLength )
// 函數描述: 信息處理
// 入口參數:     
//           char* pContent     待處理的字符串
//           int   nLength      待處理的字符串長度                                                  
// 出口參數:         
// 返 回 值: 成功返回TRUE;否則返回FALSE     
// 其    它:                                                            
/************************************************************************/
BOOL MyWin32Port::Process( char* pContent, int nLength )
{
	if ((NULL == m_hWnd) ||(NULL==pContent) || (nLength<=3) )
	{
		return FALSE;
	}
	if (m_pCurParsedContent)
	{
		delete m_pCurParsedContent;
		m_pCurParsedContent = NULL;
	}
	m_pCurParsedContent = new BYTE[nLength+1];
	memcpy(m_pCurParsedContent,pContent,nLength*sizeof(BYTE));
	m_pCurParsedContent[nLength] = '\0';
	WPARAM wParam = (WPARAM)m_pCurParsedContent;
	LPARAM lParam = (LPARAM)nLength;
	::SendMessage(m_hWnd,WM_FRAME_NOTIFY,wParam,lParam);	//給界面程序發送通知消息

	return TRUE;
}
////////////////////////////導出函數相關/////////////////////////////////
/************************************************************************/
// 函數名稱: GetFrameTypeID(BYTE* pData,int realLen)
// 函數描述: 根據傳入的字符串判斷信息相應的類型
// 入口參數:  
//			 BYTE* pData                      輸入的待解析的字符串     
//           int iDataLen                     pData字符串的長度                               
// 出口參數:         
// 返 回 值: 信息的類型
// 其    它:                                                            
/************************************************************************/
EYCDataType DLL_EXPORT  GetFrameTypeID (BYTE *pData, int &realLen)
{
	if ((NULL==pData) || (realLen<=0))
	{
		return YC_NULL;
	}
	EYCDataType enumYCDataType;
	char frameType = pData[2];
	switch(frameType)
	{
	case 1:
		enumYCDataType = YC_FIRSTFRAME;
		break;
	case 2:
		enumYCDataType = YC_SECONDFRAME;
		break;
	case 3:
		enumYCDataType = YC_THIRDFRAME;
		break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人在线观看| 亚洲午夜精品一区二区三区他趣| 欧美美女喷水视频| 欧美中文字幕一区| 欧美区一区二区三区| 欧美亚洲综合色| 欧美日韩亚洲综合在线| 欧美日韩国产高清一区二区三区 | 亚洲r级在线视频| 自拍视频在线观看一区二区| 亚洲三级视频在线观看| 18涩涩午夜精品.www| 亚洲欧美一区二区三区极速播放| 欧美激情在线观看视频免费| 国产精品不卡一区| 亚洲精品国产第一综合99久久 | 91蜜桃免费观看视频| 在线国产电影不卡| 欧美男生操女生| 精品少妇一区二区三区在线播放 | 91极品美女在线| 欧美一区2区视频在线观看| 91麻豆精品国产91久久久更新时间 | 欧美乱妇23p| 欧美一区二区视频在线观看| 久久女同精品一区二区| 国产精品精品国产色婷婷| 亚洲一区二区欧美日韩| 蜜桃av一区二区| 99精品国产一区二区三区不卡| 成人av集中营| 91麻豆精品国产自产在线观看一区| 精品国产91久久久久久久妲己 | 美女久久久精品| 国产大片一区二区| 欧美性xxxxx极品少妇| 精品人在线二区三区| 亚洲免费观看在线视频| 精品无人区卡一卡二卡三乱码免费卡| 波多野洁衣一区| 欧美成人a视频| 亚洲精品久久久久久国产精华液| 老司机免费视频一区二区三区| 99久久国产综合色|国产精品| 欧美日韩1区2区| 国产精品灌醉下药二区| 日韩高清电影一区| 91色porny| 久久精品亚洲国产奇米99| 亚洲午夜一二三区视频| 成人av电影免费在线播放| 欧美一级xxx| 亚洲一区二区三区视频在线| 成人精品免费网站| 欧美r级在线观看| 青青国产91久久久久久| 欧美亚洲免费在线一区| 综合激情网...| 成人一区二区三区中文字幕| 2023国产精华国产精品| 蜜臀91精品一区二区三区| 欧美性大战久久久久久久| 亚洲视频一二区| 91视视频在线直接观看在线看网页在线看| 精品日产卡一卡二卡麻豆| 日日夜夜精品视频天天综合网| 91小视频免费观看| 综合久久一区二区三区| 成人在线综合网| 久久日一线二线三线suv| 日本视频一区二区| 91精品国产综合久久香蕉麻豆| 亚洲最新视频在线观看| 91福利精品视频| 亚洲欧美一区二区不卡| 一本大道av伊人久久综合| 亚洲欧洲精品一区二区精品久久久 | 亚洲午夜久久久久久久久电影网 | va亚洲va日韩不卡在线观看| 国产日韩欧美一区二区三区综合| 国内外精品视频| 国产女主播一区| k8久久久一区二区三区| 亚洲视频精选在线| 在线区一区二视频| 午夜精品爽啪视频| 91麻豆精品国产91久久久久久久久| 亚洲第一二三四区| 欧美变态凌虐bdsm| 国产综合色视频| 久久美女艺术照精彩视频福利播放 | 国产欧美va欧美不卡在线| 成人av网在线| 香蕉久久一区二区不卡无毒影院| 日韩午夜电影在线观看| 激情文学综合网| 亚洲三级电影网站| 成人国产精品免费观看动漫| 亚洲精品一二三| 在线精品亚洲一区二区不卡| 亚洲h在线观看| 精品国产凹凸成av人导航| 不卡视频在线看| 日韩电影在线一区| 国产精品蜜臀在线观看| 欧美三级日韩三级国产三级| 国产精品综合av一区二区国产馆| 亚洲视频一区二区在线| 欧美大尺度电影在线| 色综合久久久久| 美腿丝袜亚洲一区| 亚洲另类在线视频| 欧美精品一区二区三区很污很色的| 成人av资源在线| 免费在线视频一区| 亚洲国产成人在线| 日韩一区二区在线免费观看| 99精品桃花视频在线观看| 免费成人性网站| 亚洲黄网站在线观看| 精品国产一区二区三区忘忧草 | 日韩女同互慰一区二区| 91丨国产丨九色丨pron| 国产一区福利在线| 日韩高清国产一区在线| 国产精品三级av在线播放| 国产一区免费电影| 亚洲成人一区二区在线观看| 国产精品女人毛片| 日韩精品专区在线| 欧美一区二区国产| 欧美日韩亚洲高清一区二区| 99久久国产综合精品麻豆| 国产伦精品一区二区三区免费| 亚洲成人av一区二区三区| 亚洲视频资源在线| 中文字幕在线不卡一区| 久久综合999| 欧美xxxxx牲另类人与| 正在播放一区二区| 日韩一区二区三| 91精品国产综合久久久蜜臀图片| 欧美系列在线观看| 在线观看中文字幕不卡| 日本道精品一区二区三区| 成a人片国产精品| k8久久久一区二区三区| 99久久99久久综合| 91在线精品一区二区三区| 成人激情小说网站| 成人av电影观看| 91视频com| 色www精品视频在线观看| 成人黄色国产精品网站大全在线免费观看| 午夜免费欧美电影| 婷婷综合另类小说色区| 日本伊人午夜精品| 久久精品噜噜噜成人88aⅴ| 美女国产一区二区三区| 久久狠狠亚洲综合| 国产成人鲁色资源国产91色综| 午夜精品福利一区二区蜜股av| 午夜精品久久久久久久久久| 丝袜脚交一区二区| 国内精品国产成人国产三级粉色| 精久久久久久久久久久| 国产成人综合在线观看| 成人av综合一区| 欧美日韩一级二级| 26uuu精品一区二区在线观看| 久久久久久日产精品| 国产精品福利一区| 亚洲国产欧美在线人成| 日本欧美在线看| 成人妖精视频yjsp地址| 色哦色哦哦色天天综合| 日韩一级大片在线观看| 国产偷v国产偷v亚洲高清| 亚洲男同性视频| 日本在线观看不卡视频| 国产成人高清视频| 欧洲亚洲精品在线| 精品国产91久久久久久久妲己 | 国产真实乱对白精彩久久| a级精品国产片在线观看| 欧美日韩国产美| 国产三区在线成人av| 亚洲天堂a在线| 久久国产生活片100| av高清久久久| 精品国精品国产| 亚洲尤物视频在线| 国产九色精品成人porny| 色婷婷久久综合| 精品国产一区二区三区久久影院| 136国产福利精品导航| 日产国产高清一区二区三区 | 亚洲午夜电影在线| 国产成人综合亚洲网站| 69堂精品视频|