📄 unit_purifiertimer.cpp
字号:
//---------------------------------------------------------------------------
#pragma hdrstop
#include "Unit_PurifierTimer.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//Purifier thread executant,do something timered
/*多媒体定时器回调过程*/
//uTimerID:定时器唯一全局标识号
//dwUser:用户数据结构指针
//uMsg,dw1,dw2:(系统保留未用)
void CALLBACK PurifierTimerProc(UINT uTimerID,
UINT uMsg,
DWORD_PTR dwUser,
DWORD_PTR dw1,
DWORD_PTR dw2)
{
TtcpIOCP *tcpIOCP;
tcpIOCP=(TtcpIOCP *)dwUser;//用户数据结构指针转换为类对象指针
/*定时复位单位时间流量计数*/
//定时器可能会重入,同时该值还会由工作线程进行修改,所以使用原子级同步函数进行数据修改
//修改值后,复位前值,作为单位时间片的采要速率
tcpIOCP->BytesSentSampSpeed=InterlockedExchange(&(tcpIOCP->BytesSentPerInterval),0);
tcpIOCP->BytesRecvSampSpeed=InterlockedExchange(&(tcpIOCP->BytesRecvPerInterval),0);
/*调用定时器接口例程过程,用于完成后期相关的定时类接口*/
tcpIOCP->InternalOnTimer();
//防止重入,使用TryEnter检测临界区,若前一例程正在处理相关信息,则离开,否则进一步处理
/*DWORD WaitResult=WaitForSingleObject(tcpIOCP->EventArray[0],0);
if(WaitResult!=WAIT_OBJECT_0)
return;
try
{*/
tcpIOCP->TimedCounter=tcpIOCP->TimedCounter+1;//定时器计数
/*每30秒检测一次超时(无I/O动作)的连接及清理回收站*/
//if((1>(tcpIOCP->FActiveThreadCount))
if((tcpIOCP->TimedCounter>=30)||(tcpIOCP->TuningListenState==LS_CLOSED&&tcpIOCP->TimedCounter>=5))
{
if((tcpIOCP->TimedCounter>=30)
&&(tcpIOCP->ExpectThreadCount>tcpIOCP->ThreadCount)
&&(tcpIOCP->ThreadCount<(long)MAX_THREAD_NUMBER)
&&(tcpIOCP->FRunningState>LS_SHUTDN)&&tcpIOCP->ValidConnections>tcpIOCP->ThreadCount)
{
tcpIOCP->TimedCounter=0;
tcpIOCP->AddThread();
}
else
{
tcpIOCP->TimedCounter=0;
}
SetEvent(tcpIOCP->EventArray[0]);
}
/*}
__finally
{
SetEvent(tcpIOCP->EventArray[0]);
}*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -