home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / msysjour / vol07 / 05 / cqa / pump_mfc.cpp < prev    next >
Text File  |  1992-09-01  |  3KB  |  157 lines

  1. // pump_mfc.cpp
  2.  
  3. #include <afxwin.h>
  4. #include "resource.h"
  5. #include <toolhelp.h>
  6. #include "pump_mfc.h"
  7.  
  8.  
  9.  
  10. CTheApp theApp;
  11.  
  12.  
  13.  
  14. CMainWindow::CMainWindow()
  15.      {
  16.      m_ti.dwSize = sizeof (TIMERINFO);
  17.      m_lpti      = &m_ti;
  18.  
  19.      Create (NULL, "MFC Message Pump demo",
  20.              WS_OVERLAPPEDWINDOW, rectDefault, NULL, "MainMenu" );
  21.      }
  22.  
  23.  
  24. void CMainWindow::OnStartPostMessage()
  25.      {
  26.      //  Calibrate message pump
  27.      //
  28.      SetWindowText ("Calibrating Message Pump...");
  29.      m_lMsgCount   = 0;
  30.      ::TimerCount (m_lpti);
  31.      m_dwStartTime = m_ti.dwmsSinceStart;
  32.  
  33.      if (m_lMsgCount < 10000)
  34.         {
  35.         m_lMsgCount++;
  36.         }
  37.  
  38.      ::TimerCount (m_lpti);
  39.      m_dwStopTime = m_ti.dwmsSinceStart;
  40.      m_dwCalibrationTime = m_dwStopTime - m_dwStartTime;
  41.  
  42.      //  Now Start message pump
  43.      //
  44.      SetWindowText ("Posting 10,000 messages thru pump...");
  45.      m_lMsgCount   = 0;
  46.      ::TimerCount (m_lpti);
  47.      m_dwStartTime = m_ti.dwmsSinceStart;
  48.      PostMessage (WM_USER, 0, 0);
  49.      }
  50.  
  51.  
  52. void CMainWindow::OnStartSendMessage()
  53.      {
  54.      //  Calibrate message pump
  55.      //
  56.      SetWindowText ("Calibrating Message Pump...");
  57.      m_lMsgCount   = 0;
  58.      ::TimerCount (m_lpti);
  59.      m_dwStartTime = m_ti.dwmsSinceStart;
  60.  
  61.      if (m_lMsgCount < 10000)
  62.         {
  63.         m_lMsgCount++;
  64.         }
  65.  
  66.      ::TimerCount (m_lpti);
  67.      m_dwStopTime = m_ti.dwmsSinceStart;
  68.      m_dwCalibrationTime = m_dwStopTime - m_dwStartTime;
  69.  
  70.      //  Now Start message pump
  71.      //
  72.      SetWindowText ("Sending 10,000 messages thru pump...");
  73.      m_lMsgCount   = 0;
  74.      ::TimerCount (m_lpti);
  75.      m_dwStartTime = m_ti.dwmsSinceStart;
  76.  
  77.  
  78.      while (m_lMsgCount < 10000)
  79.         {
  80.         SendMessage (WM_USER + 1, 0, 0);
  81.         }
  82.  
  83.      }
  84.  
  85.  
  86. LONG CMainWindow::OnUserSendMessage (UINT wParam, LONG lParam)
  87.      {
  88.      char string [40];
  89.  
  90.      m_lMsgCount++;
  91.  
  92.      if (m_lMsgCount >= 10000)
  93.         {
  94.         //    Stop message pump & display msg rate
  95.         //
  96.         ::TimerCount (m_lpti);
  97.         m_dwStopTime = m_ti.dwmsSinceStart;
  98.  
  99.         DWORD dwElapsedTime = (m_dwStopTime - m_dwStartTime) - m_dwCalibrationTime;
  100.         wsprintf (string, "MFC: Sent Msgs per second = %ld", (LONG) (1000. * ((double)m_lMsgCount/dwElapsedTime)));
  101.         SetWindowText (string);
  102.         }
  103.  
  104.      return 0;
  105.      }
  106.  
  107.  
  108. LONG CMainWindow::OnUserPostMessage (UINT wParam, LONG lParam)
  109.      {
  110.      char string [40];
  111.  
  112.      m_lMsgCount++;
  113.  
  114.      if (m_lMsgCount < 10000)
  115.         {
  116.         //    Keep message pump going
  117.         //
  118.         PostMessage (WM_USER, 0, 0L);
  119.         }
  120.  
  121.      else
  122.         {
  123.         //    Stop message pump & display msg rate
  124.         //
  125.         ::TimerCount (m_lpti);
  126.         m_dwStopTime = m_ti.dwmsSinceStart;
  127.  
  128.         DWORD dwElapsedTime = (m_dwStopTime - m_dwStartTime) - m_dwCalibrationTime;
  129.         wsprintf (string, "MFC: Posted Msgs per second = %ld", (LONG) (1000. * ((double)m_lMsgCount/dwElapsedTime)));
  130.         SetWindowText (string);
  131.         }
  132.  
  133.      return 0;
  134.      }
  135.  
  136.  
  137.  
  138. BEGIN_MESSAGE_MAP( CMainWindow, CFrameWnd )
  139.     ON_MESSAGE    (WM_USER,      OnUserPostMessage)
  140.     ON_MESSAGE    (WM_USER + 1, OnUserSendMessage)
  141.     ON_COMMAND    (IDM_STARTPOSTMESSAGE, OnStartPostMessage )
  142.     ON_COMMAND    (IDM_STARTSENDMESSAGE, OnStartSendMessage )
  143. END_MESSAGE_MAP()
  144.  
  145.  
  146.  
  147. BOOL CTheApp::InitInstance()
  148.      {
  149.      TRACE( "HELLO WORLD\n" );
  150.  
  151.      m_pMainWnd = new CMainWindow();
  152.      m_pMainWnd->ShowWindow( m_nCmdShow );
  153.      m_pMainWnd->UpdateWindow();
  154.  
  155.      return TRUE;
  156.      }
  157.