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

📄 udimonitor.pas

📁 楠楠写的DBiocp例子都是源码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
//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 + -