📄 sgipprocthread.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;
}
///////////////////////////
//由于本程序是在《sgip客户端测试》基础上修改而来,所以部分变量或函数的名称
//没有修改,特别是有关“MT”“MO”的名称。
///////////////////////////
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)
{
//当smg客户处于momtct模式,使smg处于moct,同时
//在下面的判断中原来的“1 == pDlg->m_iTestPhase”去掉,
//就可以完成momt性能测试。不再写使smg处于momtct模式的代码了。
if(TRUE)//mtct
{
SMSSubmit smssubmit;
if(1 == pDlg->GetSMSSubmit(smssubmit))
{
pDlg->m_iEditMTCTRPN ++;
pDlg->SendMessage(WM_UPDATE_DLGDATA,0,0);
CString strTemp;
strTemp.Format("%u%u",smssubmit.ulTimeID,smssubmit.ulSgipSerial);
pDlg->ShowRunState("Submit:SP(" + smssubmit.strSpNumber + ")ID(" + strTemp + ")No(" + smssubmit.strUserNumber + ")Content(" + smssubmit.strMsgContent + ")");
}
else
{
Sleep(100);
}
}
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
{
int iSPNPerSecond = pDlg->m_iEditMOCTSPNPerSecond;
int iSPNMax = pDlg->m_iEditMOCTSPNMax;
int i,j;
int iSendOkCount = 0;
int iSendFailCount = 0;
for(i = 0; i < iSPNMax;)
{
if(FALSE == pDlg->m_bStartTest) break;
if(FALSE == pDlg->m_bStartMoctTest) break;
for(j = 0; j < iSPNPerSecond; j++)
{
if(FALSE == pDlg->m_bStartTest) break;
if( i >= iSPNMax) break;
if(FALSE == pDlg->m_bStartMoctTest) break;
int iDelResult = pDlg->DeliverOneMsg(pDlg->m_strOrgPhoneNo,
pDlg->m_strMsgContent,
(unsigned long)i,
0,
pDlg->m_bWaitResp);
switch(iDelResult)
{
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_strEditMOCTEndTime = tmEndTime.Format("%y-%m-%d %H:%M:%S");
pDlg->SendMessage(WM_UPDATE_DLGDATA,0,0);
pDlg->m_iTestPhase = 0;
pDlg->m_BtnMOCTStop.EnableWindow(FALSE);
pDlg->m_BtnMOCTStart.EnableWindow();
pDlg->m_BtnMTCTStart.EnableWindow();
pDlg->m_BtnMTCTStop.EnableWindow(FALSE);
pDlg->m_BtnStopTest.EnableWindow();
}
else
{
Sleep(500);
}
}
TRACE0("TMoct Thread exit!\n");
SetEvent(pDlg->m_hTMOExit);
pDlg->ShowRunState("MO性能测试线程退出!");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -