新秀 c 和 Windows API 訊息迴圈的問題

發布 科技 2024-06-10
22個回答
  1. 匿名使用者2024-01-29

    while 語句是否仍在偵聽訊息???

    while 呼叫的回撥應該是非同步的。

    如果再發生事件,程式會不會視而不見,完全沒有反應?

    留在訊息佇列中。

    如果在同一毫秒內有數千個事件,系統不會崩潰嗎?

    檢視 1我知道在這種情況下可以建立另乙個執行緒,但是建立執行緒需要時間,並且當您建立執行緒時,系統不是仍然凍結嗎?

    如果是單核,會按順序執行,由核心排程,不會崩潰。

  2. 匿名使用者2024-01-28

    您的擔心並非沒有道理,在 95 年之前的 Windows 中,它很容易凍結。 但是,win95 採取了多種措施來避免系統崩潰。

    Windows 95 充分利用了 386 處理器的強大功能,並支援兩個許可權級別。 它管理具有兩個特權級別 0 和 3 的微處理器,也可以稱為兩個環。 Ring 0 中的元件是作業系統的底層,包括對低階內部儲存器管理的支援,而 Ring 0 中的軟體是整個系統中功能最強大的,包括幾乎所有的微處理器指令和對頁表等關鍵資料結構的訪問。

    因此,環 0 中的軟體是最可靠的。

    檢視系統和應用程式在不同的許可權級別以及不同的執行緒上執行。 即使您的程式卡住了,系統仍會將訊息放入您的訊息佇列中。 訊息迴圈就是將訊息從訊息佇列中取出並處理它們。

    我們經常看到乙個程式沒有響應,但系統很少凍結。

  3. 匿名使用者2024-01-27

    當訊息佇列中沒有訊息時,getmessage 被阻塞,也就是說,如果沒有訊息,它會通知系統將時間片移交給另乙個程序或執行緒。

  4. 匿名使用者2024-01-26

    它是多執行緒的,不會崩潰。

  5. 匿名使用者2024-01-25

    只要情況不是無休止的迴圈,就不會有你擔心的情況,懷疑CPU的處理速度現在在那裡也是沒有道理的。

  6. 匿名使用者2024-01-24

    當 Windows 處理訊息時,它使用佇列來儲存所有訊息,即訊息佇列。

    在執行 case 語句時,雖然視窗並不關心訊息佇列,但如果此時有另一條訊息出現,Windows 會自動將訊息放入佇列中,以確保訊息不會丟失。

    當 case 語句被處理並且視窗再次執行到 getmessage 時,它會檢查佇列中是否有任何未處理的訊息,並以此方式獲取之前發生過但尚未處理的訊息,因此不會對訊息視而不見。

  7. 匿名使用者2024-01-23

    雖然還在聽。

    換句話說,不會視而不見。

    建立執行緒不崩潰,CPU處理速度非常快。

  8. 匿名使用者2024-01-22

    從程式語言的角度來看是可以的,但實際上它並不是乙個無限迴圈,當沒有訊息時,執行緒進入空閒或就緒狀態,然後 CPU 給其他執行緒執行其他任務,當前執行緒定時或根據某個事件找到然後執行訊息迴圈。

  9. 匿名使用者2024-01-21

    當視窗關閉時,將收到 WM 關閉訊息。

    當你遇到這條訊息時,訊息迴圈就會崩潰,我記得是這樣

  10. 匿名使用者2024-01-20

    這個問題有點痛苦...... 您希望程式自動退出嗎?

  11. 匿名使用者2024-01-19

    TranslateMessage 內部不處理已轉換的訊息。

    例如,當訊息 A 到達時,TranslateMessage 確定訊息 A 是虛擬金鑰訊息,並將其轉換為訊息 B。

    B 訊息本身不是虛擬金鑰訊息,翻譯訊息直接返回,無需處理。

  12. 匿名使用者2024-01-18

    C 訊息被封裝為事件,並作為物件導向進行處理,因此它們不會迴圈。

    通常,可以使用表單變數屬性來獲取設定傳遞訊息。

  13. 匿名使用者2024-01-17

    如上所述。 沒有訊息迴圈。 只需將其寫在各種事件中即可。 例如,在雙擊等事件中,雙擊可以編寫自己的**。

  14. 匿名使用者2024-01-16

    MFC 已幫助您處理 WM 關閉訊息,預設情況下,您呼叫 DestroyWindow 以發出 WM DESTROY 訊息。

  15. 匿名使用者2024-01-15

    如果你學C++,很簡單,雖然C++是基於C語言基礎的改進版本,但是如果你學好C語言,你不一定能熟練地學習C++,我C語言也不錯,C++也學了很長時間,但我不敢說C++很厲害。 C++是物件導向的,C是面向過程的,如果你擅長C和C++,那麼你絕對是程式設計高手,當然演算法和資料結構也很重要。

  16. 匿名使用者2024-01-14

    建議房東看一看Windows程式設計書,可能會對你有很大幫助,如果遇到問題,多找MSDN查答案吧! 大師們就是這樣煉製的!

  17. 匿名使用者2024-01-13

    API 只知道如何呼叫它。 如果你想理解它,你必須看看作業系統核心。

  18. 匿名使用者2024-01-12

    我向你推薦一本書,Windows 程式設計第五版,但我不建議你學習這個。

  19. 匿名使用者2024-01-11

    如今,只用在C語言中的東西很少,但在微控制器或工業控制領域還是用得比較多。 不建議看Windows API程式設計,一是不學C++,很難理解Windows程式設計,而且本書是針對少量研究系統底層呼叫,開發驅動和大家可以看到的,初學者學習是不可能只用這些知識來完成一些常見的軟體程式設計的, 如果你想學習Windows程式設計,實用的仍然是MFC,但它的基礎也是C++。

    如果你的初衷是學習一些程式設計知識,可以編寫一些win可以使用的小程式,建議你不需要學那麼複雜,VB、delphi等,可以簡單易學,上手快。

  20. 匿名使用者2024-01-10

    你不必使用 Windows API,你不需要 Windows API 來編寫程式來求解方程,你不需要編寫一些經典的演算法,你必須使用作業系統提供的功能,比如建立視窗、獲取檔案目錄資訊等。 有相當多的 Windows API,很難直接從 Windows API 建立視窗開發人員。 因此,Microsoft 以 C++ 類的形式將大部分 API 封裝在 MFC 中。

    可以在該黑匣子中執行的程式稱為控制台程式,但它沒有視窗介面,並且是標準軟體。

  21. 匿名使用者2024-01-09

    我也是,譚浩強的C已經學了乙個學期了。

    然後學習 c... 鬱悶的涅槃。

  22. 匿名使用者2024-01-08

    直觀地看到您的兩個畫筆變數未定義為靜態(當繪製訊息再次出現時,視窗程序由系統執行,但不幸的是,您的情況不是靜態的,並且不會保留最後乙個視窗程序的值)。

    當然,也使用全域性變數。

相關回答
15個回答2024-06-10

#include

void main() >>>More

4個回答2024-06-10

寫得還不錯,就是類介面太簡單了,給你加幾個介面,修改定義,做乙個完整的模板棧,如果你堅持只用兩個介面,然後自己改一下,我就幫不上忙了 >>>More

7個回答2024-06-10

這是引數的外發使用,可以舉個例子;

void funa(int &b) >>>More

4個回答2024-06-10

mul*create(void)

建立鍊表。 >>>More