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

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

?? smstraffic.cpp

?? 可以自動接收短信
?? 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一区二区三区免费野_久草精品视频
欧美tickle裸体挠脚心vk| 中文字幕在线一区二区三区| 日韩美女啊v在线免费观看| 国产精品一区三区| 国产精品久久久久久久久晋中| 精品国产一区a| 99热99精品| 亚洲成av人**亚洲成av**| 欧美一区2区视频在线观看| 国内精品伊人久久久久av影院| 日本一二三四高清不卡| 欧美高清视频不卡网| 国产综合久久久久久久久久久久| 看国产成人h片视频| 18欧美亚洲精品| 精品国产乱码久久久久久久 | 粉嫩欧美一区二区三区高清影视| 亚洲国产精品传媒在线观看| 国产精品久久久久久久久免费樱桃 | 亚洲特黄一级片| 亚洲精品视频免费观看| 欧美裸体一区二区三区| 日韩片之四级片| 色综合天天综合色综合av| 久久99热这里只有精品| 国产精品一区二区三区99| aa级大片欧美| 5858s免费视频成人| 在线影院国内精品| 成人h动漫精品一区二| 国产一区二区三区在线观看免费| 亚洲高清免费在线| 日韩一区在线播放| 美女精品自拍一二三四| 亚洲综合激情小说| 亚洲综合激情网| 国精品**一区二区三区在线蜜桃| 99久久免费国产| 91女厕偷拍女厕偷拍高清| 成人中文字幕在线| 国产成人在线看| 成人免费观看av| 欧美美女一区二区| 国产精品美女久久久久aⅴ国产馆| 久久免费视频一区| 亚洲精品在线观| 亚洲成人动漫一区| www.色精品| 久久影院电视剧免费观看| 欧美极品xxx| 经典一区二区三区| 风间由美一区二区三区在线观看| 欧美日韩黄色一区二区| 欧美成人aa大片| 午夜精品久久久久久久99樱桃| 日本成人中文字幕| 激情综合一区二区三区| 欧美人xxxx| 亚洲午夜精品在线| 欧美亚洲图片小说| 日韩精品一区二区三区视频在线观看 | 欧美一级片免费看| 亚洲一区二区av电影| 91蜜桃传媒精品久久久一区二区| 欧美韩日一区二区三区| 国产成人综合视频| 26uuu国产在线精品一区二区| 日本美女一区二区| 欧美一卡二卡三卡四卡| 蜜臀av一区二区在线观看| 欧美酷刑日本凌虐凌虐| 日韩精品欧美精品| 粉嫩av亚洲一区二区图片| 久久麻豆一区二区| 国产成a人亚洲| 国产精品免费久久| 91一区二区在线观看| 亚洲人成影院在线观看| 狠狠色丁香久久婷婷综合_中| 欧美一区二区三区播放老司机| 视频一区中文字幕| 欧美v亚洲v综合ⅴ国产v| 精品一区二区三区久久| 国产丝袜在线精品| 日韩av一二三| 日韩欧美aaaaaa| 国产成人精品一区二区三区四区| 久久精品夜色噜噜亚洲aⅴ| k8久久久一区二区三区| 亚洲一区二区高清| 日韩一区二区三区电影 | 亚洲天堂福利av| 欧美体内she精高潮| 日本强好片久久久久久aaa| 久久影院午夜片一区| 99久久免费精品| 午夜精品福利视频网站| 久久美女高清视频| 日本高清不卡一区| 久久成人免费网站| 国产日产欧美一区二区三区| 人人精品人人爱| 欧美色国产精品| 亚洲国产精品一区二区久久| 欧美一区二区免费视频| 99久久久国产精品| 日本怡春院一区二区| 亚洲国产精品v| 欧美日本在线播放| 成人丝袜18视频在线观看| 视频在线观看91| 国产精品天美传媒| 日韩欧美激情在线| 91国偷自产一区二区三区成为亚洲经典| 爽好久久久欧美精品| 国产精品色噜噜| 欧美白人最猛性xxxxx69交| 色八戒一区二区三区| 国产精品系列在线观看| 日韩国产精品久久久| 中文字幕一区日韩精品欧美| 日韩欧美精品三级| 欧美日韩国产首页| 91在线看国产| 国产成人av网站| 日韩av一级电影| 亚洲一区二三区| 亚洲人亚洲人成电影网站色| 精品国产乱码久久久久久老虎| 欧美日韩一二区| 在线看日本不卡| 婷婷夜色潮精品综合在线| 亚洲国产精品黑人久久久| 欧美成人女星排行榜| 欧美日韩aaaaa| 欧美中文字幕一区二区三区亚洲 | 亚洲成人激情综合网| 国产精品久久久久久久久久久免费看 | 国产三级精品三级| 欧美不卡视频一区| 欧美一级午夜免费电影| 91.麻豆视频| 制服丝袜亚洲播放| 91精品国产91久久久久久一区二区| 91网站最新地址| 色视频成人在线观看免| 日本视频免费一区| 丝袜美腿成人在线| 日韩国产欧美在线播放| 日韩高清不卡一区二区| 亚洲一区精品在线| 亚洲成人动漫av| 日韩av一二三| 国产在线精品国自产拍免费| 精品一区二区三区av| 国产精一品亚洲二区在线视频| 国产一区二区福利| 成人h动漫精品| 99国产精品久久久久久久久久久| 91视频在线观看免费| 日本电影欧美片| 欧美日韩一区二区三区高清 | 成人激情文学综合网| 国产成人一区在线| 不卡视频一二三四| 日本韩国欧美三级| 91精选在线观看| 精品电影一区二区| 国产精品久久久久影院| 亚洲一区二区不卡免费| 蜜桃传媒麻豆第一区在线观看| 国产精品资源网站| 在线看日本不卡| 日韩免费高清视频| 国产精品日韩成人| 亚洲国产成人av| 国内成+人亚洲+欧美+综合在线| 不卡的电影网站| 这里是久久伊人| 国产精品国产三级国产aⅴ入口| 一区二区三区美女视频| 亚洲欧美一区二区在线观看| 亚洲成a人v欧美综合天堂下载| 极品瑜伽女神91| 99久久精品免费看国产免费软件| 精品视频在线免费看| 国产日韩欧美亚洲| 天堂成人国产精品一区| 不卡的电影网站| 欧美大胆人体bbbb| 一区二区日韩电影| 国产盗摄一区二区| 7777精品伊人久久久大香线蕉经典版下载 | 久久久久久久久久电影| 一区二区高清在线| 成人自拍视频在线观看| 欧美一区二区三区男人的天堂| 亚洲男人的天堂av| 国产精品一二三四| 欧美高清视频不卡网|