home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / msysjour / vol07 / 05 / cqa / pump_bc3.c next >
Text File  |  1992-09-01  |  5KB  |  185 lines

  1. // pump_bc3.c
  2.  
  3. #include <windows.h>
  4. #include <toolhelp.h>
  5. #include "resource.h"
  6.  
  7.  
  8.  
  9. long      m_lMsgCount;
  10. TIMERINFO m_ti;
  11. DWORD       m_dwStartTime  ,
  12.       m_dwStopTime     ,
  13.       m_dwCalibrationTime;
  14.  
  15. long FAR PASCAL WndProc (HWND, unsigned, UINT, LONG) ;
  16.  
  17. int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
  18.      {
  19.      static char szAppName [] = "BC++ 3.0 Pump Demo w/o OWL" ;
  20.      HWND        hWnd ;
  21.      WNDCLASS    wc ;
  22.  
  23.      if (!hPrevInstance) 
  24.           {
  25.           wc.style         = CS_HREDRAW | CS_VREDRAW ;
  26.       wc.lpfnWndProc   = WndProc ;
  27.           wc.cbClsExtra    = 0 ;
  28.           wc.cbWndExtra    = 0 ;
  29.           wc.hInstance     = hInstance ;
  30.           wc.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
  31.           wc.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
  32.           wc.hbrBackground = GetStockObject (WHITE_BRUSH) ;
  33.       wc.lpszMenuName  = "MainMenu";
  34.           wc.lpszClassName = szAppName ;
  35.  
  36.           if (!RegisterClass (&wc)) return FALSE ;
  37.           }
  38.  
  39.      hWnd = CreateWindow (szAppName,         /* window class name       */
  40.             "BC++ 3.0 Pump Demo w/o OWL",  /* window caption        */
  41.             WS_OVERLAPPEDWINDOW,     /* window style            */
  42.             CW_USEDEFAULT,           /* initial x position      */
  43.             0,                       /* initial y position      */
  44.             CW_USEDEFAULT,           /* initial x size          */
  45.             0,                       /* initial y size          */
  46.             NULL,                    /* parent window handle    */
  47.             NULL,                    /* window menu handle      */
  48.                     hInstance,               /* program instance handle */
  49.                     NULL) ;                  /* create parameters       */
  50.  
  51.      ShowWindow   (hWnd, nCmdShow) ;
  52.      UpdateWindow (hWnd) ;
  53.  
  54.      MSG msg;
  55.  
  56.      while (GetMessage (&msg, NULL, 0, 0))
  57.      {
  58.          TranslateMessage (&msg) ;      
  59.      DispatchMessage  (&msg) ;
  60.          }
  61.  
  62.      return msg.wParam ;
  63.      }
  64.  
  65.  
  66. long FAR PASCAL WndProc (HWND hwnd, unsigned iMessage, UINT wParam, LONG lParam)
  67.      {
  68.      switch (iMessage)
  69.            {
  70.       case WM_COMMAND:
  71.            {
  72.                switch (wParam)
  73.                     {
  74.             case IDM_STARTPOSTMESSAGE:
  75.                          {
  76.                          SetWindowText (hwnd, "Calibrating Message Pump...");
  77.              m_lMsgCount = 0;
  78.              m_ti.dwSize = sizeof (TIMERINFO);
  79.              TimerCount (&m_ti);
  80.              m_dwStartTime = m_ti.dwmsSinceStart;
  81.  
  82.              if (m_lMsgCount < 10000)
  83.                   {
  84.                   m_lMsgCount++;
  85.                   }
  86.  
  87.              TimerCount (&m_ti);
  88.              m_dwStopTime = m_ti.dwmsSinceStart;
  89.              m_dwCalibrationTime = m_dwStopTime - m_dwStartTime;
  90.  
  91.              //    Now Start message pump
  92.              //
  93.              SetWindowText (hwnd, "Posting 10,000 messages thru pump...");
  94.              m_lMsgCount = 0;
  95.              TimerCount (&m_ti);
  96.              m_dwStartTime = m_ti.dwmsSinceStart;
  97.              PostMessage (hwnd, WM_USER, 0, 0);
  98.                          }
  99.              return 0;
  100.  
  101.             case IDM_STARTSENDMESSAGE:
  102.                          {
  103.              SetWindowText (hwnd, "Calibrating Message Pump...");
  104.              m_lMsgCount    = 0;
  105.              m_ti.dwSize = sizeof (TIMERINFO);
  106.              TimerCount (&m_ti);
  107.              m_dwStartTime = m_ti.dwmsSinceStart;
  108.  
  109.              if (m_lMsgCount < 10000)
  110.                   {
  111.                   m_lMsgCount++;
  112.                   }
  113.  
  114.              TimerCount (&m_ti);
  115.              m_dwStopTime = m_ti.dwmsSinceStart;
  116.              m_dwCalibrationTime = m_dwStopTime - m_dwStartTime;
  117.  
  118.              //    Now Start message pump
  119.              //
  120.              SetWindowText (hwnd, "Sending 10,000 messages thru pump...");
  121.              m_lMsgCount = 0;
  122.              TimerCount (&m_ti);
  123.              m_dwStartTime = m_ti.dwmsSinceStart;
  124.  
  125.              while (m_lMsgCount < 10000)
  126.                   {
  127.                   SendMessage (hwnd, WM_USER+1, 0, 0);
  128.                   }
  129.                          }
  130.              return 0;
  131.                     }
  132.                }    
  133.                return DefWindowProc (hwnd, iMessage, wParam, lParam) ;
  134.  
  135.       case WM_USER:
  136.            {
  137.            char string [40];
  138.  
  139.            m_lMsgCount++;
  140.  
  141.            if (m_lMsgCount < 10000)
  142.              {
  143.              //    Keep message pump going
  144.            //
  145.              PostMessage (hwnd, WM_USER, 0, 0L);
  146.            }
  147.  
  148.            else
  149.            {
  150.              //    Stop message pump & display msg rate
  151.            //
  152.            TimerCount (&m_ti);
  153.              m_dwStopTime = m_ti.dwmsSinceStart;
  154.  
  155.            DWORD dwElapsedTime = (m_dwStopTime - m_dwStartTime) - m_dwCalibrationTime;
  156.            wsprintf (string, "BC w/o OWL: Posted Msgs per second = %ld", (LONG) (1000. * ((double)m_lMsgCount/dwElapsedTime)));
  157.            SetWindowText (hwnd, string);
  158.            }
  159.            }
  160.            return 0;
  161.  
  162.       case WM_USER+1:
  163.            {
  164.            char string [40];
  165.  
  166.            m_lMsgCount++;
  167.  
  168.            if (m_lMsgCount >= 10000)
  169.            {
  170.              //    Stop message pump & display msg rate
  171.            //
  172.            TimerCount (&m_ti);
  173.              m_dwStopTime = m_ti.dwmsSinceStart;
  174.  
  175.            DWORD dwElapsedTime = (m_dwStopTime - m_dwStartTime) - m_dwCalibrationTime;
  176.            wsprintf (string, "BC w/o OWL: Sent Msgs per second = %ld", (LONG) (1000. * ((double)m_lMsgCount/dwElapsedTime)));
  177.            SetWindowText (hwnd, string);
  178.            }
  179.            }
  180.            return 0;
  181.       }
  182.           
  183.      return DefWindowProc (hwnd, iMessage, wParam, lParam) ;
  184.      }
  185.