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

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

?? smstraffic.cpp

?? 串口編程源代碼.rar
?? CPP
字號:
// SmsTraffic.cpp: implementation of the CSmsTraffic class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "SmsTest.h"
#include "SmsTraffic.h"

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

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

CSmsTraffic::CSmsTraffic()
{
	m_nSendIn = 0;
	m_nSendOut = 0;
	m_nRecvIn = 0;
	m_nRecvOut = 0;

	m_hKillThreadEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
	m_hThreadKilledEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

	InitializeCriticalSection(&m_csSend);
	InitializeCriticalSection(&m_csRecv);

	// 啟動子線程
	AfxBeginThread(SmThread, this, THREAD_PRIORITY_NORMAL);
}

CSmsTraffic::~CSmsTraffic()
{
	SetEvent(m_hKillThreadEvent);			// 發出關閉子線程的信號
	WaitForSingleObject(m_hThreadKilledEvent, INFINITE);	// 等待子線程關閉

	DeleteCriticalSection(&m_csSend);
	DeleteCriticalSection(&m_csRecv);

	CloseHandle(m_hKillThreadEvent);
	CloseHandle(m_hThreadKilledEvent);
}

// 將一條短消息放入發送隊列
void CSmsTraffic::PutSendMessage(SM_PARAM* pparam)
{
	EnterCriticalSection(&m_csSend);

	memcpy(&m_SmSend[m_nSendIn], pparam, sizeof(SM_PARAM));

	m_nSendIn++;
	if (m_nSendIn >= MAX_SM_SEND)  m_nSendIn = 0;

	LeaveCriticalSection(&m_csSend);
}

// 從發送隊列中取一條短消息
BOOL CSmsTraffic::GetSendMessage(SM_PARAM* pparam)
{
	BOOL fSuccess = FALSE;

	EnterCriticalSection(&m_csSend);

	if (m_nSendOut != m_nSendIn)
	{
		memcpy(pparam, &m_SmSend[m_nSendOut], sizeof(SM_PARAM));

		m_nSendOut++;
		if (m_nSendOut >= MAX_SM_SEND)  m_nSendOut = 0;

		fSuccess = TRUE;
	}

	LeaveCriticalSection(&m_csSend);

	return fSuccess;
}

// 將短消息放入接收隊列
void CSmsTraffic::PutRecvMessage(SM_PARAM* pparam, int nCount)
{
	EnterCriticalSection(&m_csRecv);

	for (int i = 0; i < nCount; i++)
	{
		memcpy(&m_SmRecv[m_nRecvIn], pparam, sizeof(SM_PARAM));
	
		m_nRecvIn++;
		if (m_nRecvIn >= MAX_SM_RECV)  m_nRecvIn = 0;

		pparam++;
	}

	LeaveCriticalSection(&m_csRecv);
}

// 從接收隊列中取一條短消息
BOOL CSmsTraffic::GetRecvMessage(SM_PARAM* pparam)
{
	BOOL fSuccess = FALSE;

	EnterCriticalSection(&m_csRecv);

	if (m_nRecvOut != m_nRecvIn)
	{
		memcpy(pparam, &m_SmRecv[m_nRecvOut], sizeof(SM_PARAM));

		m_nRecvOut++;
		if (m_nRecvOut >= MAX_SM_RECV)  m_nRecvOut = 0;

		fSuccess = TRUE;
	}

	LeaveCriticalSection(&m_csRecv);

	return fSuccess;
}


UINT CSmsTraffic::SmThread(LPVOID lParam)
{
	CSmsTraffic* p=(CSmsTraffic *)lParam;	// this
	int nMsg;				// 收到短消息條數
	int nDelete;			// 目前正在刪除的短消息編號
	SM_BUFF buff;			// 接收短消息列表的緩沖區
	SM_PARAM param[256];	// 發送/接收短消息緩沖區
	CTime tmOrg, tmNow;		// 上次和現在的時間,計算超時用
	enum {
		stBeginRest,				// 開始休息/延時
		stContinueRest,				// 繼續休息/延時
		stSendMessageRequest,		// 發送短消息
		stSendMessageResponse,		// 讀取短消息列表到緩沖區
		stSendMessageWaitIdle,		// 發送不成功,等待GSM就緒
		stReadMessageRequest,		// 發送讀取短消息列表的命令
		stReadMessageResponse,		// 讀取短消息列表到緩沖區
		stDeleteMessageRequest,		// 刪除短消息
		stDeleteMessageResponse,	// 刪除短消息
		stDeleteMessageWaitIdle,	// 刪除不成功,等待GSM就緒
		stExitThread				// 退出
	} nState;				// 處理過程的狀態

	// 初始狀態
	nState = stBeginRest;

	// 發送和接收處理的狀態循環
	while (nState != stExitThread)
	{
		switch(nState)
		{
			case stBeginRest:
//				TRACE("State=stBeginRest\n");
				tmOrg = CTime::GetCurrentTime();
				nState = stContinueRest;
				break;

			case stContinueRest:
//				TRACE("State=stContinueRest\n");
				Sleep(300);
				tmNow = CTime::GetCurrentTime();
				if (p->GetSendMessage(&param[0]))
				{
					nState = stSendMessageRequest;	// 有待發短消息,就不休息了
				}
				else if (tmNow - tmOrg >= 5)		// 待發短消息隊列空,休息5秒
				{
					nState = stReadMessageRequest;	// 轉到讀取短消息狀態
				}
				break;

			case stSendMessageRequest:
//				TRACE("State=stSendMessageRequest\n");
				gsmSendMessage(&param[0]);
				memset(&buff, 0, sizeof(buff));
				tmOrg = CTime::GetCurrentTime();
				nState = stSendMessageResponse;
				break;

			case stSendMessageResponse:
//				TRACE("State=stSendMessageResponse\n");
				Sleep(100);
				tmNow = CTime::GetCurrentTime();
				switch (gsmGetResponse(&buff))
				{
					case GSM_OK: 
//						TRACE("  GSM_OK %d\n", tmNow - tmOrg);
						nState = stBeginRest;
						break;
					case GSM_ERR:
//						TRACE("  GSM_ERR %d\n", tmNow - tmOrg);
						nState = stSendMessageWaitIdle;
						break;
					default:
//						TRACE("  GSM_WAIT %d\n", tmNow - tmOrg);
						if (tmNow - tmOrg >= 10)		// 10秒超時
						{
//							TRACE("  Timeout!\n");
							nState = stSendMessageWaitIdle;
						}
				}
				break;

			case stSendMessageWaitIdle:
				Sleep(500);
				nState = stSendMessageRequest;		// 直到發送成功為止
				break;

			case stReadMessageRequest:
//				TRACE("State=stReadMessageRequest\n");
				gsmReadMessageList();
				memset(&buff, 0, sizeof(buff));
				tmOrg = CTime::GetCurrentTime();
				nState = stReadMessageResponse;
				break;

			case stReadMessageResponse:
//				TRACE("State=stReadMessageResponse\n");
				Sleep(100);
				tmNow = CTime::GetCurrentTime();
				switch (gsmGetResponse(&buff))
				{
					case GSM_OK: 
//						TRACE("  GSM_OK %d\n", tmNow - tmOrg);
						nMsg = gsmParseMessageList(param, &buff);
						if (nMsg > 0)
						{
							p->PutRecvMessage(param, nMsg);
							nDelete = 0;
							nState = stDeleteMessageRequest;
						}
						else
						{
							nState = stBeginRest;
						}
						break;
					case GSM_ERR:
//						TRACE("  GSM_ERR %d\n", tmNow - tmOrg);
						nState = stBeginRest;
						break;
					default:
//						TRACE("  GSM_WAIT %d\n", tmNow - tmOrg);
						if (tmNow - tmOrg >= 15)		// 15秒超時
						{
//							TRACE("  Timeout!\n");
							nState = stBeginRest;
						}
				}
				break;

			case stDeleteMessageRequest:
//				TRACE("State=stDeleteMessageRequest\n");
				if (nDelete < nMsg)
				{
					gsmDeleteMessage(param[nDelete].index);
					memset(&buff, 0, sizeof(buff));
					tmOrg = CTime::GetCurrentTime();
					nState = stDeleteMessageResponse;
				}
				else
				{
					nState = stBeginRest;
				}
				break;

			case stDeleteMessageResponse:
//				TRACE("State=stDeleteMessageResponse\n");
				Sleep(100);
				tmNow = CTime::GetCurrentTime();
				switch (gsmGetResponse(&buff))
				{
					case GSM_OK: 
//						TRACE("  GSM_OK %d\n", tmNow - tmOrg);
						nDelete++;
						nState = stDeleteMessageRequest;
						break;
					case GSM_ERR:
//						TRACE("  GSM_ERR %d\n", tmNow - tmOrg);
						nState = stDeleteMessageWaitIdle;
						break;
					default:
//						TRACE("  GSM_WAIT %d\n", tmNow - tmOrg);
						if (tmNow - tmOrg >= 5)		// 5秒超時
						{
//							TRACE("  Timeout!\n");
							nState = stBeginRest;
						}
				}
				break;

			case stDeleteMessageWaitIdle:
//				TRACE("State=stDeleteMessageWaitIdle\n");
				Sleep(500);
				nState = stDeleteMessageRequest;		// 直到刪除成功為止
				break;
		}

		// 檢測是否有關閉本線程的信號
		DWORD dwEvent = WaitForSingleObject(p->m_hKillThreadEvent, 20);
		if (dwEvent == WAIT_OBJECT_0)  nState = stExitThread;
	}

	// 置該線程結束標志
	SetEvent(p->m_hThreadKilledEvent);

	return 9999;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区成人在线| 91精品国产综合久久久久久漫画| 日韩不卡免费视频| 国产精品乱人伦| 国产欧美一区二区在线| 精品国产乱码久久久久久图片| 日韩欧美亚洲国产另类| 欧美日韩视频在线观看一区二区三区| 欧美手机在线视频| 欧美日韩精品久久久| 欧美日韩免费高清一区色橹橹| 99久久婷婷国产| 91丨国产丨九色丨pron| 91影院在线观看| 在线日韩一区二区| 91精品国产综合久久久久久久久久| 欧美日韩久久不卡| 精品久久久久久久久久久久包黑料| 国产精品天天看| 国产精品国产三级国产aⅴ中文| 国产精品不卡一区| 一区二区三区小说| 日韩电影网1区2区| 国产一区二区在线视频| 成人午夜视频在线| 欧亚一区二区三区| 欧美一级一区二区| 日本一区二区三区高清不卡| 亚洲免费伊人电影| 美女视频黄免费的久久| 国产福利一区二区三区视频在线 | 中文一区在线播放| 亚洲欧美电影一区二区| 视频一区二区不卡| 国产成人自拍在线| 91福利在线导航| 精品国产一区二区在线观看| 自拍偷拍欧美精品| 喷水一区二区三区| 色综合久久久久综合| 日韩视频一区二区三区 | 欧美国产日韩精品免费观看| 亚洲美腿欧美偷拍| 看电视剧不卡顿的网站| 91在线云播放| 久久久www免费人成精品| 亚洲福利视频一区二区| 国产美女在线观看一区| 欧美自拍偷拍午夜视频| 中文字幕av一区 二区| 麻豆精品新av中文字幕| 欧洲国内综合视频| 国产精品美女一区二区| 捆绑紧缚一区二区三区视频| 91麻豆产精品久久久久久| 久久综合九色综合97婷婷| 午夜成人在线视频| 日韩免费电影网站| 亚洲大片一区二区三区| 99r国产精品| 久久久久久久久久美女| 奇米一区二区三区| 欧美军同video69gay| 一区二区久久久| av在线综合网| 国产日韩欧美在线一区| 蜜桃久久久久久久| 欧美欧美午夜aⅴ在线观看| 尤物在线观看一区| 97久久超碰国产精品| 欧美国产国产综合| 成人激情综合网站| 国产精品久久二区二区| 国产98色在线|日韩| 国产亚洲欧美色| 国产黄色成人av| 国产亚洲欧美日韩在线一区| 国产福利91精品| 国产精品成人在线观看| 99re视频精品| 一区二区三区不卡视频| 欧美在线色视频| 亚洲va在线va天堂| 亚洲三级久久久| 91极品美女在线| 亚洲国产成人91porn| 欧美高清视频一二三区| 三级亚洲高清视频| 精品国产免费一区二区三区四区 | 日本韩国欧美三级| 亚洲成人自拍偷拍| 91精品一区二区三区久久久久久 | 国产精品日韩成人| jizz一区二区| 亚洲资源中文字幕| 91精品国产品国语在线不卡| 久久国内精品视频| 国产精品国产三级国产aⅴ入口 | 91精品国产色综合久久不卡电影| 午夜欧美大尺度福利影院在线看| 制服丝袜成人动漫| 久久精品久久99精品久久| 26uuuu精品一区二区| 成人国产精品免费观看| 亚洲在线观看免费视频| 精品成人一区二区| 成人av在线播放网站| 一区二区日韩av| 日韩欧美亚洲国产精品字幕久久久 | 国产亚洲一区二区三区在线观看| 成人av电影免费在线播放| 亚洲高清免费视频| 久久精品网站免费观看| 色94色欧美sute亚洲线路二| 肉肉av福利一精品导航| 久久精品人人爽人人爽| 欧美激情一区二区三区蜜桃视频| 激情成人综合网| 亚洲精品自拍动漫在线| 日韩一区二区视频| 成人精品国产福利| 日本aⅴ亚洲精品中文乱码| 国产日韩精品一区二区三区在线| 欧洲国产伦久久久久久久| 国产乱子伦一区二区三区国色天香| 亚洲天天做日日做天天谢日日欢 | 日韩精品在线网站| 91国模大尺度私拍在线视频| 国产美女久久久久| 亚洲大片精品永久免费| 亚洲人成伊人成综合网小说| 日韩女优电影在线观看| 欧美性做爰猛烈叫床潮| 成人精品在线视频观看| 国产一区二区在线影院| 天天av天天翘天天综合网| 日韩美女视频19| 国产亚洲美州欧州综合国| 91精品国产综合久久小美女| 色狠狠色狠狠综合| 成人免费高清视频| 国产一区二区在线电影| 久久精品噜噜噜成人88aⅴ| 天天av天天翘天天综合网色鬼国产| 中文字幕亚洲不卡| 中文av字幕一区| 欧美韩国日本不卡| 欧美精彩视频一区二区三区| 26uuu亚洲| 久久夜色精品一区| 日韩欧美国产午夜精品| 在线播放视频一区| 欧美绝品在线观看成人午夜影视| 在线中文字幕一区| 91麻豆国产福利在线观看| 9人人澡人人爽人人精品| 高清beeg欧美| 国产.精品.日韩.另类.中文.在线.播放| 美女网站在线免费欧美精品| 免费视频最近日韩| 精品系列免费在线观看| 韩国av一区二区三区| 国产91富婆露脸刺激对白| 本田岬高潮一区二区三区| 成年人午夜久久久| 在线观看91视频| 91精品国产91综合久久蜜臀| 日韩一区二区三区视频| 久久综合丝袜日本网| 国产片一区二区| 亚洲免费在线观看视频| 丝袜a∨在线一区二区三区不卡| 麻豆国产一区二区| 国产精品资源在线看| 99精品国产视频| 欧美日韩国产欧美日美国产精品| 日韩三级免费观看| 国产午夜精品福利| 亚洲视频综合在线| 午夜视频在线观看一区二区| 精品写真视频在线观看| 成人v精品蜜桃久久一区| 欧美午夜精品免费| 精品国产一区二区三区久久影院| 欧美激情在线一区二区| 亚洲午夜电影在线观看| 韩国精品一区二区| 色综合久久久久综合99| 欧美成人a在线| 亚洲人成亚洲人成在线观看图片| 午夜影院久久久| 国v精品久久久网| 欧美精品一二三区| 国产午夜亚洲精品理论片色戒| 亚洲免费在线播放| 国产一区欧美日韩| 精品视频一区二区三区免费| 国产午夜精品一区二区| 偷窥少妇高潮呻吟av久久免费| 风间由美一区二区av101|