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

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

?? smstraffic.cpp

?? 這是一個采用VC++軟件編寫的“手機短信收發源程序”
?? 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一区二区三区免费野_久草精品视频
国产精品私人影院| 欧美日韩不卡视频| 美女尤物国产一区| 午夜精品久久久久久久久| 亚洲精品网站在线观看| 亚洲欧美自拍偷拍| 亚洲精品国产品国语在线app| 国产精品伦一区| 国产精品久久久99| 亚洲激情男女视频| 爽好多水快深点欧美视频| 天堂成人国产精品一区| 男女男精品视频| 国内精品久久久久影院薰衣草| 麻豆91免费观看| 成人在线综合网| 色综合色狠狠综合色| 欧美系列一区二区| 日韩精品一区二区三区视频| 久久毛片高清国产| 亚洲欧洲日产国码二区| 亚洲国产精品人人做人人爽| 免费观看在线色综合| 国产精品亚洲视频| 色偷偷久久人人79超碰人人澡| 欧美日韩三级一区二区| 久久久久亚洲综合| 亚洲精品免费播放| 精品一区二区在线免费观看| 99久久伊人精品| 777午夜精品视频在线播放| 久久久久久久久99精品| 尤物在线观看一区| 国产在线精品一区二区夜色| 99热精品国产| 精品免费日韩av| 一区二区三区在线影院| 国产一区二区三区在线观看免费| 97久久超碰国产精品电影| 欧美美女激情18p| 国产精品看片你懂得| 日日摸夜夜添夜夜添国产精品| 高清不卡一二三区| 91精品国产免费久久综合| 亚洲视频在线一区| 精品一区二区三区欧美| 欧美亚洲日本一区| 国产精品区一区二区三| 蜜桃久久av一区| 欧美无人高清视频在线观看| 国产欧美日韩在线观看| 另类小说色综合网站| 色呦呦网站一区| 欧美激情艳妇裸体舞| 久久www免费人成看片高清| 在线视频你懂得一区二区三区| 精品不卡在线视频| 热久久一区二区| 欧美日韩一级二级| 亚洲激情网站免费观看| 91影院在线免费观看| 国产无遮挡一区二区三区毛片日本 | 性感美女久久精品| 成人高清免费观看| 久久精品一区四区| 国产精品一区二区你懂的| 精品乱码亚洲一区二区不卡| 水蜜桃久久夜色精品一区的特点 | 亚洲成人精品在线观看| 91在线视频播放| 日本一区二区久久| 国产成人8x视频一区二区| 精品国产一区二区亚洲人成毛片| 蜜桃久久久久久久| 日韩视频在线永久播放| 青青草国产精品亚洲专区无| 欧美高清视频一二三区| 蜜臀a∨国产成人精品| 制服.丝袜.亚洲.另类.中文| 亚洲不卡一区二区三区| 欧美日韩美少妇 | 欧美一级黄色片| 日本免费新一区视频| 欧美精品123区| 美腿丝袜在线亚洲一区| 精品国产精品网麻豆系列| 极品少妇xxxx偷拍精品少妇| 精品国产凹凸成av人导航| 国产美女久久久久| 国产精品久久久久久久久久久免费看 | 亚洲日穴在线视频| 欧美午夜精品免费| 美女精品自拍一二三四| 欧美极品xxx| 一本色道久久综合狠狠躁的推荐 | 欧美最新大片在线看| 亚洲国产精品久久久久秋霞影院 | 北岛玲一区二区三区四区| 亚洲三级久久久| 欧美日韩精品欧美日韩精品| 久久www免费人成看片高清| 久久久久国产一区二区三区四区| 丁香桃色午夜亚洲一区二区三区| 亚洲精品免费播放| 日韩一区二区免费电影| 成人黄色在线网站| 亚洲成av人片www| 精品国精品国产尤物美女| 99精品国产99久久久久久白柏| 性做久久久久久免费观看| 精品理论电影在线| 91国偷自产一区二区开放时间| 毛片不卡一区二区| 亚洲天堂成人在线观看| 91精品国产一区二区三区| 成人av在线播放网址| 视频一区二区三区入口| 国产午夜久久久久| 337p亚洲精品色噜噜狠狠| 成人动漫视频在线| 捆绑变态av一区二区三区| 亚洲视频在线一区观看| 久久中文字幕电影| 欧美日韩成人综合天天影院| 丰满白嫩尤物一区二区| 青青草97国产精品免费观看| 亚洲欧美综合在线精品| 久久品道一品道久久精品| 欧美日韩国产电影| 色欲综合视频天天天| 国产成人综合视频| 国产风韵犹存在线视精品| 亚洲综合视频在线观看| 国产精品女同互慰在线看| 日韩欧美国产综合| 777a∨成人精品桃花网| 欧美专区亚洲专区| 成人av网站免费观看| 国产乱码精品一区二区三区av| 日韩av一区二| 亚洲国产精品影院| 亚洲一区二区av电影| 亚洲人吸女人奶水| 中文字幕永久在线不卡| 国产精品私房写真福利视频| 久久先锋影音av| 久久综合中文字幕| 精品久久一二三区| 欧美tickle裸体挠脚心vk| 欧美一区二区大片| 日韩一区二区免费电影| 日韩精品中文字幕在线不卡尤物| 欧美伦理视频网站| 欧美日韩国产天堂| 在线播放亚洲一区| 欧美日韩一本到| 欧美日韩国产美| 日韩一区二区高清| 精品美女在线播放| 欧美激情在线看| 国产精品日韩精品欧美在线| 国产精品乱码一区二三区小蝌蚪| 国产精品久久久久影院色老大 | 91免费国产视频网站| 91蝌蚪porny| 在线精品国精品国产尤物884a| 日本韩国视频一区二区| 91高清在线观看| 欧美日韩一区二区在线视频| 欧美精品xxxxbbbb| 欧美成人官网二区| 欧美激情一区在线观看| 亚洲精品成人天堂一二三| 亚洲国产精品一区二区www在线| 亚洲va欧美va人人爽| 日本不卡在线视频| 国内一区二区视频| 91蜜桃免费观看视频| 欧美日韩视频在线一区二区| 日韩欧美一卡二卡| 国产精品女上位| 亚洲成人激情av| 国产大片一区二区| 色狠狠综合天天综合综合| 欧美一区二区三区在线看| 国产女人水真多18毛片18精品视频 | 欧美亚男人的天堂| 亚洲天堂2014| 欧美性感一区二区三区| caoporm超碰国产精品| 在线精品亚洲一区二区不卡| 一区二区三区四区av| 久久机这里只有精品| 91在线观看高清| 日韩一二三区不卡| 亚洲蜜臀av乱码久久精品蜜桃| 美女网站一区二区| 99久久伊人网影院| 精品日本一线二线三线不卡| 亚洲欧美一区二区三区孕妇|