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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? smstraffic.cpp

?? 一個手機(jī)短信收發(fā)程序使用時需與電腦相連支持usb和comm接口
?? 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);			// 發(fā)出關(guān)閉子線程的信號
	WaitForSingleObject(m_hThreadKilledEvent, INFINITE);	// 等待子線程關(guān)閉

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

	CloseHandle(m_hKillThreadEvent);
	CloseHandle(m_hThreadKilledEvent);
}

// 將一條短消息放入發(fā)送隊(duì)列
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);
}

// 從發(fā)送隊(duì)列中取一條短消息
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;
}

// 將短消息放入接收隊(duì)列
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);
}

// 從接收隊(duì)列中取一條短消息
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;				// 收到短消息條數(shù)
	int nDelete;			// 目前正在刪除的短消息編號
	SM_BUFF buff;			// 接收短消息列表的緩沖區(qū)
	SM_PARAM param[256];	// 發(fā)送/接收短消息緩沖區(qū)
	CTime tmOrg, tmNow;		// 上次和現(xiàn)在的時間,計(jì)算超時用
	enum {
		stBeginRest,				// 開始休息/延時
		stContinueRest,				// 繼續(xù)休息/延時
		stSendMessageRequest,		// 發(fā)送短消息
		stSendMessageResponse,		// 讀取短消息列表到緩沖區(qū)
		stSendMessageWaitIdle,		// 發(fā)送不成功,等待GSM就緒
		stReadMessageRequest,		// 發(fā)送讀取短消息列表的命令
		stReadMessageResponse,		// 讀取短消息列表到緩沖區(qū)
		stDeleteMessageRequest,		// 刪除短消息
		stDeleteMessageResponse,	// 刪除短消息
		stDeleteMessageWaitIdle,	// 刪除不成功,等待GSM就緒
		stExitThread				// 退出
	} nState;				// 處理過程的狀態(tài)

	// 初始狀態(tài)
	nState = stBeginRest;

	// 發(fā)送和接收處理的狀態(tài)循環(huán)
	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;	// 有待發(fā)短消息,就不休息了
				}
				else if (tmNow - tmOrg >= 5)		// 待發(fā)短消息隊(duì)列空,休息5秒
				{
					nState = stReadMessageRequest;	// 轉(zhuǎn)到讀取短消息狀態(tài)
				}
				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;		// 直到發(fā)送成功為止
				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;
		}

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

	// 置該線程結(jié)束標(biāo)志
	SetEvent(p->m_hThreadKilledEvent);

	return 9999;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕中文在线不卡住| 日本aⅴ免费视频一区二区三区| 国产乱码精品一品二品| 久久久久久免费网| 粉嫩欧美一区二区三区高清影视| 国产亚洲婷婷免费| 成人av电影免费观看| 国产精品久久久久7777按摩| 色综合色综合色综合| 无码av中文一区二区三区桃花岛| 欧美精品久久久久久久久老牛影院| 偷拍亚洲欧洲综合| 久久先锋影音av鲁色资源| 国产91丝袜在线观看| 一个色妞综合视频在线观看| 91.成人天堂一区| 国产成人a级片| 一区二区高清视频在线观看| 欧美疯狂性受xxxxx喷水图片| 久久国产精品第一页| 中文字幕一区二区在线观看| 欧美亚洲免费在线一区| 蜜桃精品在线观看| 欧美激情在线一区二区三区| 色噜噜久久综合| 久久精品久久精品| 一区在线中文字幕| 日韩一级片在线观看| 成人综合日日夜夜| 日韩精品1区2区3区| 欧美主播一区二区三区| 国内精品国产成人| 亚洲永久精品国产| 久久一日本道色综合| 欧美亚洲国产bt| 国产精品乡下勾搭老头1| 亚洲精品高清在线| www一区二区| 欧美性极品少妇| 成人sese在线| 久久99精品久久久久久久久久久久 | 国产91丝袜在线观看| 亚洲成av人综合在线观看| 久久久国产精华| 欧美日韩精品免费| www.av精品| 国产乱人伦精品一区二区在线观看| 一区二区三区不卡视频| 国产精品伦理一区二区| 欧美成人精品1314www| 在线视频一区二区三| av色综合久久天堂av综合| 国产一区二区免费视频| 日韩一区精品字幕| 亚洲aⅴ怡春院| 亚洲日本电影在线| 中文在线资源观看网站视频免费不卡| 在线不卡a资源高清| 在线中文字幕一区| 91在线porny国产在线看| 国产乱码一区二区三区| 狠狠久久亚洲欧美| 美国三级日本三级久久99| 午夜av电影一区| 亚洲第一成人在线| 一区二区三区成人在线视频| 最新成人av在线| 最新久久zyz资源站| 国产日产欧美精品一区二区三区| 欧美xfplay| 精品国产亚洲在线| 欧美v亚洲v综合ⅴ国产v| 日韩午夜在线播放| 日韩网站在线看片你懂的| 91精品国产入口| 欧美一区二区三区免费| 7878成人国产在线观看| 91精品婷婷国产综合久久竹菊| 欧美剧情电影在线观看完整版免费励志电影 | 国产精品99久久久久久久vr| 激情久久五月天| 国内外成人在线| 国产精品一区二区x88av| 国产盗摄精品一区二区三区在线 | 99久久99久久综合| 91小视频免费看| 在线视频国内一区二区| 在线视频国产一区| 欧美色窝79yyyycom| 欧美人牲a欧美精品| 日韩欧美国产成人一区二区| 精品欧美一区二区三区精品久久| 亚洲精品在线免费观看视频| 久久久精品tv| 国产精品女主播av| 亚洲线精品一区二区三区| 日本亚洲免费观看| 国内精品国产成人国产三级粉色| 成人app下载| 色综合久久久久综合| 欧美猛男gaygay网站| 日韩欧美一区在线观看| 国产视频一区不卡| 夜夜嗨av一区二区三区| 美女网站一区二区| 高清国产一区二区| 欧美又粗又大又爽| 日韩欧美国产综合一区 | 亚洲成av人**亚洲成av**| 美女国产一区二区| 99精品视频一区| 91精品国产品国语在线不卡| 久久久精品国产免费观看同学| 亚洲欧美一区二区三区极速播放| 午夜精品久久久久久久久久久| 日韩av高清在线观看| 国产999精品久久| 欧美亚洲日本一区| 国产区在线观看成人精品| 亚洲精品中文在线影院| 国产一区高清在线| 色激情天天射综合网| 精品国产sm最大网站| 一级女性全黄久久生活片免费| 国内不卡的二区三区中文字幕| 91麻豆蜜桃一区二区三区| 日韩欧美亚洲国产另类| 亚洲人成精品久久久久| 国产一区欧美一区| 欧美在线一区二区三区| 国产亚洲欧洲997久久综合| 亚洲电影一级黄| jiyouzz国产精品久久| 日韩一区二区不卡| 亚洲成a天堂v人片| 91在线视频播放| 久久人人爽人人爽| 免费在线成人网| 在线观看亚洲精品| 中文字幕在线一区二区三区| 国产在线不卡视频| 88在线观看91蜜桃国自产| 一区二区三区中文字幕精品精品 | 91精品国产高清一区二区三区蜜臀 | 97精品久久久久中文字幕| 日韩女优视频免费观看| 亚洲地区一二三色| 色呦呦日韩精品| 国产精品美女久久久久久久久久久 | 狠狠色丁香久久婷婷综合丁香| 欧美色综合久久| 一区二区三区不卡视频| 99精品在线免费| 日本一区二区三区在线不卡| 久草在线在线精品观看| 日韩一区二区精品| 男女男精品视频| 91麻豆精品国产91久久久久久 | 成人一级片网址| 久久久久成人黄色影片| 国产综合色产在线精品| 精品久久久久久久久久久久久久久久久| 偷窥国产亚洲免费视频| 精品蜜桃在线看| 国产又粗又猛又爽又黄91精品| 精品久久人人做人人爱| 精品一区二区在线播放| 欧美大肚乱孕交hd孕妇| 久久国产精品一区二区| 久久品道一品道久久精品| 国产麻豆欧美日韩一区| 久久久国产一区二区三区四区小说 | 成人夜色视频网站在线观看| 国产精品三级视频| 成人午夜电影久久影院| 中文字幕日韩精品一区| 972aa.com艺术欧美| 一区二区三区在线视频观看58| 色综合久久天天| 亚洲成人免费影院| 欧美电影影音先锋| 美女视频黄a大片欧美| 久久久久久久久久久黄色| 丰满少妇在线播放bd日韩电影| 中文字幕二三区不卡| 91日韩在线专区| 亚洲第一成年网| 欧美精品一区二区三区四区| 国产精品1区2区3区在线观看| 国产精品视频九色porn| 色综合久久综合网| 丝袜美腿亚洲一区二区图片| 欧美xxxxx裸体时装秀| 高清不卡一二三区| 亚洲黄色性网站| 日韩视频国产视频| 成人激情午夜影院| 亚洲h动漫在线| 国产日韩影视精品| 在线观看视频一区|