⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sgipprocthread.cpp

📁 1、自己编写的遵循SGIP1.1协议的短信客户端程序。仅供测试、学习。 2、该程序只实现了SGIP1.1协议的一部分。
💻 CPP
字号:
#include "stdafx.h"
#include "SgipServiceDemo.h"
#include "SgipProcThread.h"
#include "SgipServiceDemoDlg.h"
#include "Parsecstring.h"

extern long g_lSerialNo;
extern unsigned long g_ulSerialNo;
extern long g_lReceiveMsgCount;

////////////////////////////////////////////////////////////////////////////
//function:得到一个唯一标志该短消息的号码
//input: 
//return:
////////////////////////////////////////////////////////////////////////////
unsigned long CreateGlobalCycleNo()
{

	::InterlockedIncrement(&(g_lSerialNo));
	g_ulSerialNo = (unsigned long)g_lSerialNo;
	if(g_ulSerialNo == 0)
	{
		::InterlockedIncrement(&(g_lSerialNo));
		g_ulSerialNo = (unsigned long)g_lSerialNo;
	}
	return g_ulSerialNo;
}

UINT TMtct(LPVOID wParam)
{
	TRACE0("TMtct Thread Start!\n");
	CSgipServiceDemoDlg *pDlg = (CSgipServiceDemoDlg *)wParam;
	pDlg->ShowRunState("MT性能测试线程开始!");
	
	while (WaitForSingleObject(pDlg->m_hTMTAppExit, 0) != WAIT_OBJECT_0)
	{
		if(1 == pDlg->m_iTestPhase)//mtct
		{
			int iSPNPerSecond = pDlg->m_iEditMTCTSPNPerSecond;
			int iSPNMax = pDlg->m_iEditMTCTSPNMax;
			int i,j;
			int iSendOkCount = 0;
			int iSendFailCount = 0;
			for(i = 0; i < iSPNMax;)
			{
				if(FALSE == pDlg->m_bStartTest) break;
				if(FALSE == pDlg->m_bStartMtctTest) break;
				for(j = 0; j < iSPNPerSecond; j++)
				{
					if(FALSE == pDlg->m_bStartTest) break;
					if( i >= iSPNMax) break;
					if(FALSE == pDlg->m_bStartMtctTest) break;


					int iSubResult = pDlg->SubmitOneMsg(pDlg->m_strMsgContent, 
														pDlg->m_strFeePhoneNo, 
														pDlg->m_strDestPnoneNo,
														(unsigned long)i,
														2,
														0,
														pDlg->m_bWaitResp);
					switch(iSubResult)
					{
					case 0://ok
						iSendOkCount++;
						break;
					case -3://网络连接错误
					case -4://time out
						//break;
						pDlg->SendMessage(WM_USER_REINITSOCKET);
						Sleep(10);
					default://other error
						pDlg->ShowRunState("短消息提交失败,请检查参数配置及网络状况!");
						iSendFailCount++;
						break;
					}
					i++;
					if(iSPNPerSecond <= 50)
						Sleep(1000/iSPNPerSecond -4);
					if(iSPNPerSecond <= 100 && iSPNPerSecond > 50)
						Sleep(700/iSPNPerSecond);
					if(iSPNPerSecond > 100)
						Sleep(500/iSPNPerSecond);
				}
			}

			CString strMsg;
			strMsg.Format("共提交%d条短信,成功%d条,失败%d条",i,iSendOkCount,iSendFailCount);
			pDlg->ShowRunState(strMsg);
			
			CTime tmEndTime;
			tmEndTime = CTime::GetCurrentTime();
			pDlg->m_strEditMTCTEndTime = tmEndTime.Format("%y-%m-%d %H:%M:%S");
			pDlg->SendMessage(WM_UPDATE_DLGDATA,0,0);
			pDlg->m_iTestPhase = 0;
			pDlg->m_BtnMTMOStop.EnableWindow(FALSE);
			pDlg->m_BtnMTMOStart.EnableWindow();
			pDlg->m_BtnMOCTStop.EnableWindow(FALSE);
			pDlg->m_BtnMOCTStart.EnableWindow();
			pDlg->m_BtnMTCTStart.EnableWindow();
			pDlg->m_BtnMTCTStop.EnableWindow(FALSE);
			pDlg->m_BtnStopTest.EnableWindow();	
		}
		else
		{
			Sleep(100);
		}
	}
	TRACE0("TMtct Thread exit!\n");
	SetEvent(pDlg->m_hTMTExit);
	pDlg->ShowRunState("MT性能测试线程退出!");
	return 0;
}

UINT TMoct(LPVOID wParam)
{
	TRACE0("TMoct Thread Start!\n");
	CSgipServiceDemoDlg *pDlg = (CSgipServiceDemoDlg *)wParam;
	pDlg->ShowRunState("MO性能测试线程开始!");
	while (WaitForSingleObject(pDlg->m_hTMOAppExit, 0) != WAIT_OBJECT_0)
	{
		if(2 == pDlg->m_iTestPhase)//moct
		{
			SMSDeliver smsdeliver;
			if(1 == pDlg->GetSMSDeliver(smsdeliver))
			{
				pDlg->m_iEditMOCTRPN ++;
				pDlg->SendMessage(WM_UPDATE_DLGDATA,0,0);

				CString strTemp;
				strTemp.Format("%u%u",smsdeliver.ulTimeID,smsdeliver.ulSgipSerial);
				pDlg->ShowRunState("Deliver:ID(" + strTemp + ")No(" + smsdeliver.strGSMNo + ")Content(" + smsdeliver.strDeliverMsg + ")");	
			}
			else
			{
				Sleep(100);
			}
		}
		else
		{
			Sleep(500);
		}
	}
	TRACE0("TMoct Thread exit!\n");
	SetEvent(pDlg->m_hTMOExit);
	pDlg->ShowRunState("MO性能测试线程退出!");
	return 0;
}

UINT TMomtct(LPVOID wParam)
{
	TRACE0("TMomtct Thread Start!\n");
	CSgipServiceDemoDlg *pDlg = (CSgipServiceDemoDlg *)wParam;
	pDlg->ShowRunState("MOMT性能测试线程开始!");
	while (WaitForSingleObject(pDlg->m_hTMOMTAppExit, 0) != WAIT_OBJECT_0)
	{
		if(3 == pDlg->m_iTestPhase)//momtct
		{
			SMSDeliver smsdeliver;
			if(1 == pDlg->GetSMSDeliver(smsdeliver))
			{
				pDlg->m_iEditMTMORPN ++;

				CString strTemp;
				strTemp.Format("%u%u",smsdeliver.ulTimeID,smsdeliver.ulSgipSerial);
				pDlg->ShowRunState("Deliver:ID(" + strTemp + ")No(" + smsdeliver.strGSMNo + ")Content(" + smsdeliver.strDeliverMsg + ")");
				
				CString strRespMsg = "Mo Resp:" + smsdeliver.strDeliverMsg;

				int iSubResult = pDlg->SubmitOneMsg(strRespMsg, 
													smsdeliver.strGSMNo, 
													smsdeliver.strGSMNo,
													smsdeliver.ulSgipSerial,
													2,
													0,
													pDlg->m_bWaitResp);
				switch(iSubResult)
				{
				case 0://ok
					pDlg->m_iEditMTMOSPN ++;
					break;
				case -3://网络连接错误
				case -4://time out
					//break;
					pDlg->SendMessage(WM_USER_REINITSOCKET);
					Sleep(10);
				default://other error
					pDlg->ShowRunState("短消息提交失败,请检查参数配置及网络状况!");
					break;
				}
				pDlg->SendMessage(WM_UPDATE_DLGDATA,0,0);
			}
			else
			{
				Sleep(100);
			}
		}
		else
		{
			Sleep(500);
		}
	}
	TRACE0("TMomtct Thread exit!\n");
	SetEvent(pDlg->m_hTMOMTExit);
	pDlg->ShowRunState("MOMT性能测试线程退出!");
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -