在C++控制臺程序中,使用for(;;)和while(TRUE)實現無限循環是非常常見的做法。這兩種循環結構的主要區別在于使用break或return語句可以跳出循環。在某些情況下,我們可能會使用全局變量來實現線程間的交互,例如通過BOOL bStop變量來指示線程是否應該停止。主線程設置bStop為TRUE時,可以通知工作線程結束任務。在進行線程間通信時,可以利用PeekMessage函數來檢測消息隊列是否為空。PeekMessage不會阻塞,最后一個參數傳入PM_NOREMOVE,表示不從隊列中移除消息,適用于檢測消息隊列。例如,當使用全局變量BOOL bStop表示線程是否停止時,主線程設置bStop為TRUE,可以通知工作線程停止運行。具體代碼如下:if (PeekMessage(&iMsg, NULL, 0, 0, PM_NOREMOVE)) {if (!GetMessage(&iMsg, NULL, 0, 0)) return iMsg.wParam;TranslateMessage(&iMsg);DispatchMessage(&iMsg);} else {if (bStop) break; /* 結束 */}如果你正在開發一個多線程程序,通過Win32控制臺程序編寫,并使用socket進行端口監聽,為了將程序最小化到托盤,采用了消息循環,但不確定如何將監聽代碼放入循環中,可以考慮增加一個專門用于監聽的線程。然而,這并不是唯一的方法。為了實現窗口托盤化,可以將消息循環放在主線程,同時將端口監聽放在另一個線程中。這樣,主線程可以處理界面消息,而另一個線程可以專注于網絡操作。在使用消息循環時,關鍵在于能夠響應用戶操作,如最小化窗口。通常,GetMessage后會取出消息并保存在iMsg中,然后通過DispatchMessage(&iMsg)將消息傳遞給對應的窗口消息處理函數。在注冊窗口類時定義的窗口消息處理函數中,可以處理最小化消息。最小化消息是由WM_SYSCOMMAND消息發送的,其中wParam等于SC_MINIMIZE時代表最小化操作。