MFC 程式是單執行緒還是多執行緒?

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

    Windows 作業系統基於訊息傳遞機制執行。

    Windows作業系統為每個執行緒維護乙個訊息池,並將接收到的訊息(例如,滑鼠點選,鍵盤按下)儲存在訊息池中,然後不斷檢索訊息並將其傳遞給需要處理訊息的函式(例如,按鈕按下的功能)。

    通常,如果 f1() 和 f2() 在同乙個執行緒中,則會按照訊息的順序觸發相應的 f1 或 f2。 在另一次執行之前,不會觸發第一次觸發的執行。

    如果您在兩個不同的執行緒上,則在訊息到達後將立即觸發相應的 f1 或 f2,並且看起來 f1 和 f2 同時執行。

    預設情況下,典型應用程式是單執行緒的。

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

    標準過程是單執行緒。

    你說的與執行緒無關,它是一種 Windows 訊息機制。

    在同乙個訊息環中,常規訊息逐個執行,必須等待上一條訊息結束。

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

    我更喜歡使用多執行緒,最簡單的方法就是要有效率,比如我們在乙個程式中只使用乙個主線程,而且我們一次只做一件事; 而如果我們開啟多條執行緒,我們可以同時做多件事而不會相互干擾,我們每個人都可以做自己的工作。

    多執行緒就像乙個多工作業系統,我們可以同時聽**和上網,而單執行緒就像單任務,我們需要聽**然後上網,所以需要更長的時間。

    比如你的程式需要不斷更新某條資料,那麼你可以為它開乙個執行緒,讓它無限迴圈,每隔一段時間在後台進行更新,而主線程還在不停地和使用者互動,有個執行緒是不是很方便?

    這就是我的理解。

    還有乙個地方是執行緒比較通用的,比如在我們的程式中,有乙個比較耗時的功能,比如讀取乙個龐大的資料庫中的資訊,計算資料,比較費時,那麼我們就要為它開乙個執行緒,讓它在後台工作,當主線程在和使用者做其他事情的時候, 這個執行緒會悄悄地處理來自後台的資料,這樣使用者就不必等待,也不會覺得你的程式執行緩慢;通常超過 5 秒的等待時間會為其開啟乙個執行緒。

    這就是它的全部內容

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

    這應該是乙個網路程式...

    確實可以使用沒有多執行緒的非同步網路通訊模式,這樣在等待接收資料時不會阻塞土地,也省去了執行緒同步的麻煩。 只是你提到的這個例子是用多執行緒來寫乙個字段,**在程式中阻塞接收訊息,乙個執行緒處理乙個固定人的訊息,結構簡單。

    對於宋振通的單核計算機來說,每個時間點只有乙個執行緒在執行,CPU不斷切換執行緒,讓每個執行緒都有機會執行。

    現在電腦多核很普遍,多執行緒可以充分發揮CPU的效率,多個CPU核可以同時執行多個執行緒,速度更快。

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

    使用以下引數和返回值編寫執行緒函式。

    uint threadtest(lpvoid pparam);

    然後使用以下功能直接在按鈕中啟動執行緒。

    afxbeginthread(threadtest,null);

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

    在將處理資料的地方,使用 afxbeginthread 建立乙個執行緒,它只是乙個 MFC 封閉的全域性函式,您可以查詢它並注意過程函式必須是靜態的或全域性的。 然後,通過 afxbeginthread 的引數將資料傳遞給 procedure 函式進行處理。 至於計算結果。

    建議您使用向主視窗傳送訊息通知的方法。

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

    MFC 執行緒建立函式:afxbeginthreadwin32 執行緒建立函式:createThreadcrt 執行緒建立函式:

    BeginThread Beginthreadex 可以以所有三種方式使用。

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

    在 Windows 下成為伺服器的最佳解決方案是 iocp(i o complete port),中文名稱 i o complete port。

    效能非常好。 說到Windows高階程式設計,難度指數比較高。

    你覺得這個解決方案是不可行的:

    1.大量的CPU時間將被浪費。 如果計算機只有 2 個 CPU,但有 200 個執行緒處於開啟狀態,則計算機的 CPU 數量有限。

    此時,最多有 2 個執行緒同時執行(因為你只有 2 個 CPU),但執行緒的不斷切換讓你感覺好像所有 200 個執行緒都在執行,但速度很慢。 (此時執行緒切換會消耗大量的CPU時間,收益大於損失)。

    2.浪費記憶體。 執行緒需要用 Windows 中的資料來表示,200 個執行緒,開銷有點浪費(雖然現在記憶體很大,但我們不能浪費它)。

    3.執行緒同步問題會讓你頭暈目眩,200個執行緒併發處理很麻煩,要做到執行緒同步,以及執行緒通訊,同步通訊是多執行緒必須考慮的事情。

    4.iocp ---有乙個非常好的解決方案

    網上有很多關於IOCP研究的資料,這裡就不多說了。

    enjoy coding

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

    問題描述不明確,二樓好,知識長。

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

    使用 suspendthread() 和 resumethread() 函式,您可以掛起和喚醒乙個執行緒,該執行緒可以由另乙個執行緒呼叫,也可以由它自己呼叫。

    sleep 也稱為樓上的 sleep() 函式或 sleepex 函式,它只是暫時暫停執行緒以與使用者互動的指定事件時間段。 當然,休眠也是暫停的,這個暫停時間是無限期的,需要 resumethread()。

    歸根結底,冬眠和睡眠被暫停,這只是乙個不確定的時間以及是否需要醒來的問題。 睡眠需要被線喚醒,到了睡覺的時間,你自己醒來,這就是區別!

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

    首先,我想強調一點:你這裡有主線程和新執行緒,它們都存在於你的程式程序中,這個問題不涉及主程序、子程序什麼的,不能混淆程序和線世界的概念。

    即使新執行緒沒有使用睡眠功能,UIS 仍然無法響應新執行緒中更新 UI 的操作。 Windows執行緒可以分為UI執行緒和工作執行緒,主線程是UI執行緒,負責所有響應使用者輸入和繪圖視窗介面的人機互動工作,新建立的執行緒是工作執行緒,只負責計算,不處理人機互動。 所以什麼時候響應介面的更新是由你的主線程決定的,如果主線程還在執行乙個函式,沒有返回訊息迴圈,它就無法更新介面,而當函式執行時,介面就可以更新了。

    防止執行緒中斷是乙個執行緒同步問題,與此處的問題無關。 Windows 提供了一系列執行緒同步 API,您可以使用使用者級執行緒同步 API,例如使用事件、訊號量、互斥鎖等的自旋鎖、關鍵區域、纖細讀寫鎖、條件變數或核心同步物件。 具體原理和使用方法無法用幾句話講清楚,可以閱讀作業系統教學純材料和“Windows 核心程式設計”中關於多執行緒的章節。

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

您不是新安裝的,也不是恢復到系統的。

這是由系統中的幾個檔案錯誤,損壞引起的。 >>>More

6個回答2024-06-10

1.選擇計算機上的任意軟體,單擊滑鼠選擇該軟體,然後右鍵單擊以管理員身份執行。 >>>More

7個回答2024-06-10

main()

int i,j,x=0;初始化 x=0for(i=0; i<2;i++) >>>More

10個回答2024-06-10

這沒什麼大不了的,如果終止並重新開啟就好了。

12個回答2024-06-10

藍屏基本上是遊戲系統,硬體不相容,或者配置不夠,房東,你執行某個程式很久了,甚至可能中毒。 >>>More