光明夭 2023-11-17 12:09 采纳率: 0%
浏览 7

Windows程序编译成功,而且在后台有运行,为什么没有显示可视化的窗口?

Windows程序编译成功,而且在后台有运行,为什么没有显示可视化的窗口?

#include <windows.h>
#include "mltithrd.h"


HANDLE _hInst;
HANDLE _hWnd;
HANDLE _hThread[5];
UINT   _uDelayType=NODELAY;


int APIENTRY WinMain (HANDLE hInstance, HANDLE hPrevInstance,
                      LPSTR lpCmdLine, int nCmdShow)
{
MSG  msg;
WNDCLASS wndclass;

   UNREFERENCED_PARAMETER(lpCmdLine);
   UNREFERENCED_PARAMETER(hPrevInstance);

   _hInst = hInstance;

   wndclass.style = 0;
   wndclass.lpfnWndProc = (WNDPROC)MainWndProc;
   wndclass.cbClsExtra = 0;
   wndclass.cbWndExtra = 0;
   wndclass.hInstance = hInstance;
   wndclass.hIcon = LoadIcon (hInstance, "Multi1Icon");
   wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
   wndclass.hbrBackground = GetStockObject (WHITE_BRUSH);
   wndclass.lpszMenuName = "Multi1Menu";
   wndclass.lpszClassName = "Multi1Class";

   RegisterClass(&wndclass);

   _hWnd = CreateWindow ("Multi1Class",
                         "Thread Priority Example",
                         WS_OVERLAPPED | WS_SYSMENU,
                         0, 0, 400, 250,
                         NULL,
                         NULL,
                         hInstance,
                         NULL);

   ShowWindow(_hWnd, nCmdShow);

   while (GetMessage (&msg, NULL, 0, 0)) {
      TranslateMessage (&msg);
      DispatchMessage (&msg);
   }
   return (msg.wParam);
}

LONG APIENTRY MainWndProc (HWND hWnd, UINT message,
                           UINT wParam, LONG lParam)
{
int    i;
DWORD  ThreadID[5];
static HMENU  hMenu;
static HANDLE hMasterThread;
static DWORD  ThreadArg[5] = {HIGHEST_THREAD,    // 0x00
                              ABOVE_AVE_THREAD,  // 0x3F
                              NORMAL_THREAD,     // 0x7F
                              BELOW_AVE_THREAD,  // 0xBF
                              LOWEST_THREAD      // 0xFF
                             };

 switch (message) {
   case WM_CREATE:
      hMenu = GetMenu (hWnd);

      hMasterThread = GetCurrentThread();
      SetThreadPriority(hMasterThread, THREAD_PRIORITY_HIGHEST);

      for(i=0; i<5; i++)
          _hThread[i] = CreateThread(NULL,
                                    0,
                                    (LPTHREAD_START_ROUTINE)ThreadProc,
                                    &ThreadArg[i],
                                    CREATE_SUSPENDED,
                                    &ThreadID[i]);

      SetThreadPriority(_hThread[0], THREAD_PRIORITY_HIGHEST);
      SetThreadPriority(_hThread[1], THREAD_PRIORITY_ABOVE_NORMAL);
      SetThreadPriority(_hThread[2], THREAD_PRIORITY_NORMAL);
      SetThreadPriority(_hThread[3], THREAD_PRIORITY_BELOW_NORMAL);
      SetThreadPriority(_hThread[4], THREAD_PRIORITY_LOWEST);
      return (0);

   case WM_COMMAND:
      switch (LOWORD(wParam))
      {
         case IDM_RESUME:
            EnableMenuItem(hMenu, IDM_RESUME, MF_BYCOMMAND | MF_GRAYED);
            EnableMenuItem(hMenu, IDM_SUSPEND, MF_BYCOMMAND | MF_ENABLED);
            DrawMenuBar(hWnd);
            for (i=0; i<5; i++)
                ResumeThread(_hThread[i]);
            return (0);

         case IDM_SUSPEND:
            for (i=0; i<5; i++)
                SuspendThread(_hThread[i]);
            EnableMenuItem(hMenu, IDM_SUSPEND, MF_BYCOMMAND | MF_GRAYED);
            EnableMenuItem(hMenu, IDM_RESUME, MF_BYCOMMAND | MF_ENABLED);
            DrawMenuBar(hWnd);
            return (0);

         case IDM_FOR:
            _uDelayType = FORLOOPDELAY;
            EnableMenuItem(hMenu, IDM_FOR, MF_BYCOMMAND | MF_GRAYED);
            EnableMenuItem(hMenu, IDM_SLEEP, MF_BYCOMMAND | MF_ENABLED);
            EnableMenuItem(hMenu, IDM_NODELAY, MF_BYCOMMAND | MF_ENABLED);
            DrawMenuBar(hWnd);
            return (0);

         case IDM_SLEEP:
            _uDelayType = SLEEPDELAY;
            EnableMenuItem(hMenu, IDM_SLEEP, MF_BYCOMMAND | MF_GRAYED);
            EnableMenuItem(hMenu, IDM_FOR, MF_BYCOMMAND | MF_ENABLED);
            EnableMenuItem(hMenu, IDM_NODELAY, MF_BYCOMMAND | MF_ENABLED);
            DrawMenuBar(hWnd);
            return (0);

         case IDM_NODELAY:
            _uDelayType = NODELAY;
            EnableMenuItem(hMenu, IDM_NODELAY, MF_BYCOMMAND | MF_GRAYED);
            EnableMenuItem(hMenu, IDM_FOR, MF_BYCOMMAND | MF_ENABLED);
            EnableMenuItem(hMenu, IDM_SLEEP, MF_BYCOMMAND | MF_ENABLED);
            DrawMenuBar(hWnd);
            return (0);

         default:
            return (0);
      }

   case WM_DESTROY :
      for(i=0; i<5; i++)
          TerminateThread(_hThread[i], 0);
      PostQuitMessage (0);
      return (0);

   default:
      return DefWindowProc (hWnd, message, wParam, lParam);
   }
   return (0L);
}

VOID ThreadProc(DWORD *ThreadArg)
{
RECT rect;
HDC  hDC;
HANDLE hBrush, hOldBrush;
DWORD dwThreadHits = 0;
char  cBuf[80];
int   iThreadNo, i;

   GetClientRect (_hWnd, &rect);
   hDC = GetDC (_hWnd);
   hBrush = CreateSolidBrush(RGB(*(ThreadArg), *(ThreadArg), *(ThreadArg)));
   hOldBrush = SelectObject(hDC, hBrush);

   switch (*ThreadArg) {
     case HIGHEST_THREAD   : iThreadNo = 0; break;
     case ABOVE_AVE_THREAD : iThreadNo = 1; break;
     case NORMAL_THREAD    : iThreadNo = 2; break;
     case BELOW_AVE_THREAD : iThreadNo = 3; break;
     case LOWEST_THREAD    : iThreadNo = 4; break;
   }


   wsprintf(cBuf, "T%d", iThreadNo);
   TextOut(hDC, *(ThreadArg), rect.bottom-150, cBuf, lstrlen(cBuf));
   wsprintf(cBuf, "P=%d", GetThreadPriority(_hThread[iThreadNo]));
   TextOut(hDC, *(ThreadArg), rect.bottom-130, cBuf, lstrlen(cBuf));

   do
   {
     dwThreadHits++;


     Rectangle(hDC, *(ThreadArg), rect.bottom-(dwThreadHits/10),
               *(ThreadArg)+0x40, rect.bottom);


     if (_uDelayType == SLEEPDELAY)
         Sleep(10);
     else if (_uDelayType == FORLOOPDELAY)
         for (i=0; i<100000; i++);
     else // _uDelayType == NODELAY)
         {   }
   } while (dwThreadHits < 1000);

   hBrush = SelectObject(hDC, hOldBrush);
   DeleteObject (hBrush);
   ReleaseDC (_hWnd, hDC);
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-17 14:03
    关注

    【相关推荐】




    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月17日