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

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

?? smstraffic.cpp

?? 短信貓程序
?? CPP
字號(hào):
// 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);

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

CSmsTraffic::~CSmsTraffic()
{
	SetEvent(m_hKillThreadEvent);			// 發(fā)出關(guān)閉子線程的信號(hào)
	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)
{
   int nCount = 0;

	CSmsTraffic* p=(CSmsTraffic *)lParam;	// this
	int nMsg;				// 收到短消息條數(shù)
	int nDelete;			// 目前正在刪除的短消息編號(hào)
	SM_BUFF buff;			// 接收短消息列表的緩沖區(qū)
	SM_PARAM param[256];	// 發(fā)送/接收短消息緩沖區(qū)
	CTime tmOrg, tmNow;		// 上次和現(xiàn)在的時(shí)間,計(jì)算超時(shí)用
	enum {
		stBeginRest,				// 開始休息/延時(shí)
		stContinueRest,				// 繼續(xù)休息/延時(shí)
		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)
	{
      //gsmRecvRefuse(FALSE);

		switch(nState)
		{
			case stBeginRest:
//				TRACE("State=stBeginRest\n");
				tmOrg = CTime::GetCurrentTime();
				nState = stContinueRest;
				break;

			case stContinueRest:
//				TRACE("State=stContinueRest\n");
				Sleep(200);
				tmNow = CTime::GetCurrentTime();
				if (p->GetSendMessage(&param[0]))
				{
					nState = stSendMessageRequest;	// 有待發(fā)短消息,就不休息了
				}
				else if (tmNow - tmOrg >= 3)		// 待發(fā)短消息隊(duì)列空,休息3秒
				{
					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秒超時(shí)
						{
//							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秒超時(shí)
						{
//							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秒超時(shí)
						{
//							TRACE("  Timeout!\n");
							nState = stBeginRest;
						}
				}
				break;

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

		// 檢測是否有關(guān)閉本線程的信號(hào)
		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
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频在线不卡| 国产不卡视频一区| 制服丝袜亚洲播放| 日本中文一区二区三区| 欧美综合色免费| 日日摸夜夜添夜夜添精品视频| 色综合久久久久| 亚洲超碰97人人做人人爱| 欧美日韩欧美一区二区| 日韩电影免费在线看| 日韩一区和二区| 国产成人av一区二区三区在线 | 国模冰冰炮一区二区| 91精品国产丝袜白色高跟鞋| 亚洲精品v日韩精品| 91久久一区二区| 人妖欧美一区二区| 国产日产欧产精品推荐色| 成人福利视频在线看| 一区二区免费在线播放| 欧美日本免费一区二区三区| 亚洲成人精品一区二区| 日韩欧美aaaaaa| 97久久精品人人爽人人爽蜜臀| 伊人色综合久久天天人手人婷| 欧美日韩一区二区三区四区| 亚洲午夜私人影院| 国产网站一区二区三区| av亚洲精华国产精华精华| 亚洲午夜精品网| 久久久91精品国产一区二区精品| 99免费精品在线观看| 日韩精品一二三区| 日韩理论片网站| 精品久久久久久久一区二区蜜臀| jlzzjlzz欧美大全| 色哟哟欧美精品| 国产一区二区福利| 亚洲18女电影在线观看| 久久日韩粉嫩一区二区三区| 国产伦精品一区二区三区视频青涩 | 久久婷婷色综合| 欧美体内she精视频| 国产精品99久久久久久有的能看| 亚洲一卡二卡三卡四卡| 久久综合九色综合97_久久久| 91丨九色丨蝌蚪丨老版| 国模冰冰炮一区二区| 一区二区三区在线视频播放 | 精品一区二区三区视频在线观看 | 久久亚洲综合色一区二区三区 | 一区二区三区精品在线观看| 91精品中文字幕一区二区三区| 国产大片一区二区| 国内不卡的二区三区中文字幕| 亚洲专区一二三| 自拍偷拍欧美激情| 中文字幕va一区二区三区| 欧美一区二区三区免费在线看| 色综合咪咪久久| 91麻豆国产在线观看| 成人免费看的视频| 国产91综合网| 国产成人免费视频一区| 狠狠色丁香九九婷婷综合五月| 亚洲国产一区二区在线播放| 中文字幕免费一区| 国产欧美一区二区精品婷婷| 91精品国产综合久久久久| 91免费视频大全| 日本国产一区二区| 色综合天天狠狠| 99re热这里只有精品免费视频| 国产乱人伦精品一区二区在线观看| 视频一区视频二区中文字幕| 亚洲女同ⅹxx女同tv| 亚洲欧美综合网| 亚洲色图色小说| 亚洲综合无码一区二区| 亚洲精品美腿丝袜| 亚洲狠狠爱一区二区三区| 亚洲一区二区综合| 香蕉久久夜色精品国产使用方法 | 国产精品久久久一区麻豆最新章节| 欧美成人高清电影在线| 日韩视频123| 五月婷婷另类国产| 日本不卡一区二区三区高清视频| 亚洲成人精品影院| 麻豆极品一区二区三区| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美aaa在线| 国产精品一级片在线观看| 成人美女视频在线看| 99免费精品视频| 欧美日韩一区中文字幕| 777亚洲妇女| 久久久久久黄色| 亚洲人成亚洲人成在线观看图片| 亚洲欧美乱综合| 日本成人中文字幕在线视频| 天天做天天摸天天爽国产一区| 日韩av不卡在线观看| 久久99久久精品| 成人高清免费观看| 777色狠狠一区二区三区| 欧美哺乳videos| 综合电影一区二区三区 | 欧洲中文字幕精品| 日韩欧美成人激情| 最新国产精品久久精品| 亚洲午夜一二三区视频| 美洲天堂一区二卡三卡四卡视频 | 成人爱爱电影网址| 欧美喷水一区二区| 久久久99久久| 亚洲第一av色| 成+人+亚洲+综合天堂| 欧美色图一区二区三区| 精品国产露脸精彩对白 | 国产欧美日韩卡一| 五月天视频一区| 福利91精品一区二区三区| 91麻豆高清视频| 亚洲精品一线二线三线无人区| 国产欧美一区二区精品仙草咪| 一区二区三区小说| 国产高清精品久久久久| 色婷婷狠狠综合| 国产亚洲精品资源在线26u| 亚洲少妇30p| 国产不卡一区视频| 日韩亚洲欧美一区二区三区| 久久综合九色综合欧美98| 一区二区三区久久| jiyouzz国产精品久久| 欧美一区二区三区在| 亚洲日本护士毛茸茸| 精品中文字幕一区二区| 欧美亚洲一区二区在线| 中文字幕国产精品一区二区| 亚洲一区二区三区国产| 粉嫩欧美一区二区三区高清影视 | 国产精品理论片| 久久66热re国产| 337p亚洲精品色噜噜狠狠| 自拍偷拍国产精品| 成人激情动漫在线观看| 亚洲一区二区三区自拍| 国产成a人无v码亚洲福利| 日韩三级伦理片妻子的秘密按摩| 亚洲欧美色图小说| av一本久道久久综合久久鬼色| 精品999在线播放| 日本成人在线看| 69堂成人精品免费视频| 亚洲免费三区一区二区| 成人午夜精品在线| 国产精品嫩草影院com| 国产一区二区在线视频| 欧美变态口味重另类| 日韩av网站免费在线| 欧美日韩免费在线视频| 自拍偷拍亚洲综合| 91同城在线观看| 亚洲美女视频在线观看| 国产成人免费av在线| 久久这里只有精品视频网| 久久成人羞羞网站| 久久综合五月天婷婷伊人| 蜜桃av一区二区| 2020国产精品| 懂色av一区二区三区免费观看| 久久日韩粉嫩一区二区三区| 强制捆绑调教一区二区| 欧美一区二区三区免费观看视频| 爽好多水快深点欧美视频| 欧美日韩五月天| 男女性色大片免费观看一区二区| 在线播放日韩导航| 免费成人在线观看| 国产亚洲精久久久久久| 成人网页在线观看| 尤物视频一区二区| 欧美日本国产一区| 黄色成人免费在线| 国产精品美女一区二区三区| 久久99国产精品久久| 久久网站热最新地址| 成人午夜又粗又硬又大| 亚洲欧洲制服丝袜| 欧美一区二区视频在线观看2020 | 看片的网站亚洲| 国产无人区一区二区三区| www.av亚洲| 日本不卡在线视频| 国产精品美女久久久久久久久| 色诱视频网站一区| 久久国产精品99久久人人澡| 欧美xfplay|