📄 udimonitor.pas
字号:
//IOCP挂起数加1 (Send)
procedure TDIMonitor.AddIOCPSend;
begin
try
m_MonitorLock.Lock;
m_iocpSendCount := m_iocpSendCount + 1;
finally
m_MonitorLock.UnLock;
end;
end;
//IOCP挂起数减1 (Send)
procedure TDIMonitor.SubIOCPSend;
begin
try
m_MonitorLock.Lock;
m_iocpSendCount := m_iocpSendCount - 1;
finally
m_MonitorLock.UnLock;
end;
end;
//IOCP挂起数加1 (CloseSocke)
procedure TDIMonitor.AddIOCPCloseSocke;
begin
try
m_MonitorLock.Lock;
m_iocpCloseSockeCount := m_iocpCloseSockeCount + 1;
finally
m_MonitorLock.UnLock;
end;
end;
//IOCP挂起数加1 (CloseSocke)
procedure TDIMonitor.SubIOCPCloseSocke;
begin
try
m_MonitorLock.Lock;
m_iocpCloseSockeCount := m_iocpCloseSockeCount - 1;
finally
m_MonitorLock.UnLock;
end;
end;
//IOCP AcceptEx挂起数加1
procedure TDIMonitor.AddIOCPAcceptEx;
begin
try
m_MonitorLock.Lock;
m_AcceptExBufCount := m_AcceptExBufCount + 1;
finally
m_MonitorLock.UnLock;
end;
end;
//IOCP AcceptEx挂起数加1
procedure TDIMonitor.SubIOCPAcceptEx;
begin
try
m_MonitorLock.Lock;
m_AcceptExBufCount := m_AcceptExBufCount - 1;
finally
m_MonitorLock.UnLock;
end;
end;
//IOCP 系统连接数加1
procedure TDIMonitor.AddActiveConn;
begin
try
m_MonitorLock.Lock;
m_ActiveConnections := m_ActiveConnections + 1;
finally
m_MonitorLock.UnLock;
end;
end;
//IOCP 系统连接数减1
procedure TDIMonitor.SubActiveConn;
begin
try
m_MonitorLock.Lock;
m_ActiveConnections := m_ActiveConnections - 1;
finally
m_MonitorLock.UnLock;
end;
end;
//IOCP 真正分配Buffer次数
procedure TDIMonitor.AddNewBuffer;
begin
try
m_MonitorLock.Lock;
m_iNewBufferCount := m_iNewBufferCount + 1;
CalcCapability;
finally
m_MonitorLock.UnLock;
end;
end;
//IOCP 真正释放Buffer次数
procedure TDIMonitor.AddFreeBuffer;
begin
try
m_MonitorLock.Lock;
m_iFreeBufferCount := m_iFreeBufferCount + 1;
CalcCapability;
finally
m_MonitorLock.UnLock;
end;
end;
//IOCP 真正分配上下文次数
procedure TDIMonitor.AddNewContext;
begin
try
m_MonitorLock.Lock;
m_iNewClientCount := m_iNewClientCount + 1;
CalcCapability;
finally
m_MonitorLock.UnLock;
end;
end;
//IOCP 真正释放上下文次数
procedure TDIMonitor.AddFreeContext;
begin
try
m_MonitorLock.Lock;
m_iFreeClientCount := m_iFreeClientCount + 1;
CalcCapability;
finally
m_MonitorLock.UnLock;
end;
end;
//IOCP 器释放上下文次数
procedure TDIMonitor.AddExitFreeContextCount;
begin
try
m_MonitorLock.Lock;
m_iExitFreeContextCount := m_iExitFreeContextCount + 1;
CalcCapability;
finally
m_MonitorLock.UnLock;
end;
end;
function TDIMonitor.GetExitFreeContextCount: DWORD; //IOCP 器释放上下文次数
begin
try
m_MonitorLock.Lock;
Result := m_iExitFreeContextCount;
finally
m_MonitorLock.UnLock;
end;
end;
//投递PostClose次数
procedure TDIMonitor.AddPostClose;
begin
try
m_MonitorLock.Lock;
m_iPostCloseCounrt := m_iPostCloseCounrt + 1;
CalcCapability;
finally
m_MonitorLock.UnLock;
end;
end;
function TDIMonitor.GetPostClose: DWORD; //IOCP 器释放上下文次数
begin
try
m_MonitorLock.Lock;
Result := m_iPostCloseCounrt;
finally
m_MonitorLock.UnLock;
end;
end;
procedure TDIMonitor.GetParams( var nDay: Integer;
var nHour: Integer;
var nMinute: Integer;
var nSecond: Integer;
var nRecvGB: Integer;
var nRecvMB: Integer;
var nRecvKB: Integer;
var nRecvByte: Integer;
var nSecvGB: Integer;
var nSecvMB: Integer;
var nSecvKB: Integer;
var nSecvByte: Integer;
var rRecvRate: Real;
var rSendRate: Real;
var nNewBufferCount: Integer;
var nFreeBufferCount: Integer;
var nNewClientCount: Integer;
var nFreeClientCount: Integer;
var nExitFreeContextCount: Integer;
var nRecvCount: Integer;
var nSendCount: Integer;
var nIocpRecvCount: Integer;
var nIocpSendCount: Integer;
var nAcceptExBufCount: Integer;
var nIocpBufCount: Integer;
var nContextCount: Integer;
var nFreeContextCount: Integer );
var
m_CountSec: Integer;
m_RecvByte: Real;
m_SendByte: Real;
begin
try
m_MonitorLock.Lock;
if m_bStart then begin
m_LastRun := GetTickCount;
//得到秒
m_nSecondRun := m_nSecondRun + (m_LastRun - m_StartRun) div 1000;
//修改起始时间 (最后时间-余数)
m_StartRun := m_LastRun - (m_LastRun - m_StartRun) mod 1000;
//秒转成分
m_nMinuteRun := m_nMinuteRun + m_nSecondRun div 60;
m_nSecondRun := m_nSecondRun mod 60;
//分转成时
m_nHourRun := m_nHourRun + m_nMinuteRun div 60;
m_nMinuteRun := m_nMinuteRun mod 60;
//时转换成天
m_nDayRun := m_nDayRun + m_nHourRun div 24;
m_nHourRun := m_nHourRun mod 24;
nDay := m_nDayRun;
nHour := m_nHourRun;
nMinute := m_nMinuteRun;
nSecond := m_nSecondRun;
//字节转化成KB
m_nTotalRecvKB := m_nTotalRecvKB + m_nTotalRecvBytes div 1024;
m_nTotalSendKB := m_nTotalSendKB + m_nTotalSendBytes div 1024;
m_nTotalRecvBytes := m_nTotalRecvBytes mod 1024;
m_nTotalSendBytes := m_nTotalSendBytes mod 1024;
//KB转化成MB
m_nTotalRecvMB := m_nTotalRecvMB + m_nTotalRecvKB div 1024;
m_nTotalSendMB := m_nTotalSendMB + m_nTotalSendKB div 1024;
m_nTotalRecvKB := m_nTotalRecvKB mod 1024;
m_nTotalSendKB := m_nTotalSendKB mod 1024;
//MB转化成GB
m_nTotalRecvGB := m_nTotalRecvGB + m_nTotalRecvMB div 1024;
m_nTotalSendGB := m_nTotalSendGB + m_nTotalSendMB div 1024;
m_nTotalRecvMB := m_nTotalRecvMB mod 1024;
m_nTotalSendMB := m_nTotalSendMB mod 1024;
nRecvGB := m_nTotalRecvGB;
nRecvMB := m_nTotalRecvMB;
nRecvKB := m_nTotalRecvKB;
nRecvByte := m_nTotalRecvBytes;
nSecvGB := m_nTotalSendGB;
nSecvMB := m_nTotalSendMB;
nSecvKB := m_nTotalSendKB;
nSecvByte := m_nTotalSendBytes;
//计算RECV流量 秒
m_CountSec := m_nDayRun * 24*60*60+ //天
m_nHourRun * 60*60+ //时
m_nMinuteRun*60+ //分
m_nSecondRun; //秒
m_RecvByte := m_nTotalRecvGB*1024*1024*1024 +
m_nTotalRecvMB*1024*1024+
m_nTotalRecvKB*1024+
m_nTotalRecvBytes;
//每秒字节流量
if m_CountSec<>0 then
m_RecvRate := m_RecvByte/m_CountSec
else
m_RecvRate := 0;
rRecvRate := m_RecvRate;
//计算SEND流量 秒
m_SendByte := m_nTotalSendGB*1024*1024*1024 +
m_nTotalSendMB*1024*1024+
m_nTotalSendKB*1024+
m_nTotalSendBytes;
if m_CountSec<>0 then
m_SendRate := m_SendByte/m_CountSec
else
m_SendRate := 0;
rSendRate := m_SendRate;
nNewBufferCount := m_iNewBufferCount;
nFreeBufferCount := m_iFreeBufferCount;
nNewClientCount := m_iNewClientCount;
nFreeClientCount := m_iNewClientCount;
nExitFreeContextCount := m_iExitFreeContextCount;
nRecvCount := m_RecvCount;
nSendCount := m_SendCount;
nIocpRecvCount := m_iocpRecvCount;
nIocpSendCount := m_iocpRecvCount;
nAcceptExBufCount := m_AcceptExBufCount;
nIocpBufCount := m_FreeBufCount;
nContextCount := m_ActiveConnections;
nFreeContextCount := m_FreeContextCount;
end;
finally
m_MonitorLock.UnLock;
end;
end;
initialization
_DIMonitor := TDIMonitor.Create;
finalization
_DIMonitor.Free;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -