調試 Win32 應用時,觀察黃色箭頭 (指令指針) 在 WndProc 函數內反覆跳轉:27→28→39→40→27→28→39→40...,偶爾進入 29-35 分支,看起來像「死循環」無法返回 WinMain。
// WinMain 核心循環
while (GetMessage(&msg, NULL, 0, 0)) { // ① 阻塞等待消息
TranslateMessage(&msg); // ② 處理鍵盤字符消息
DispatchMessage(&msg); // ③ 分發到 WndProc
}
// GetMessage 返回 0 (WM_QUIT) 時退出循環
GetMessage 調用處;TranslateMessage → DispatchMessage;switch(message) 分支;GetMessage → TranslateMessage → DispatchMessage → WndProc 入口;WM_PAINT, WM_TIMER, WM_MOUSEMOVE, WM_NCHITTEST 等),**消息泵高速循環**;29-35 是處理特定消息 (如 WM_COMMAND, WM_KEYDOWN) 的分支代碼。Win32 GUI 應用主線程 99% 時間在消息循環中度過。只要不處理 WM_QUIT,循環永不結束。這是事件驅動架構的核心:等待消息 → 分發處理 → 繼續等待。
message == WM_PAINT 或特定消息,避免高頻觸發干擾觀察;>0 普通消息,=0 WM_QUIT 退出,<0 錯誤。調試器顯示的「死循環」實為 **Win32 消息泵正常高速運行**。主線程職責就是「死循環等消息、分發處理」。理解此機制,才能從「為什麼卡住」轉向「這條消息怎麼處理」。