什麼時候該使用多執行緒,以及更恰當的多執行緒程式設計方法之討論
大約在寫了一年左右的應用程式以後開始發生了一些困惑,在我寫的程式中很多使用了多執行緒,我們了解使用執行緒的必要性,但是什麼時候使用,以及該如何更好使用和管理多執行緒方面,我覺得值得思考。
這裡要指出的幾點是:(注:以下所說的子執行緒皆指輔助線程,而非介面執行緒)
1.主線程不可以向子執行緒傳送訊息(但是反之則可以),這種做法本身沒有任何意義,是概念不清的問題;
2.當視窗要向子執行緒傳送訊息時;這個問題也是本文討論的重點。首先,子執行緒沒有處理訊息的能力,它只能按照原先設定好的路徑執行。所以視窗只能將訊息傳送給主線程,再由主線程想辦法改變子執行緒的行為。主線程如何跟子執行緒通訊呢?(顯然不能用訊息)我所能想到的就是主線程改變一些公共域的值,然後由子執行緒通過輪訓的方式來實現通訊。這也是windows給我們提供的方法,當我們使用afxbeginthread或者createthread建立乙個子執行緒的時候,會傳入乙個物件的指標,很顯然,這個物件就是控制子執行緒的關鍵。
至此了解了什麼時候使用多執行緒的問題。
第2個問題:如何更好的使用多執行緒
首先是**結構的問題。我們可以將子執行緒所要完成的功能全部在乙個執行緒函式裡實現,這顯然在大多數時候是不合理的,第二種方法是通過父執行緒傳遞來的物件指標,呼叫該物件類的成員函式來實現所需的功能。這裡引發新的問題,需不需要單獨建立乙個類來包裝這些函式,還是將這些函式寫在父執行緒的類中(包括輔助線程處理函式自己)。這兩種方法從本質上來說似乎沒有什麼差別。後者的話,當我們需要改變子執行緒的行為時,只需要改變自身類成員變數就可以了,但是結構顯得有些混亂。
什麼時候使用多執行緒
使用多執行緒為什麼可以提高效率呢?io是關鍵。很多的應用要使用io,但是cpu是很快的,io往往是很慢的。看 main1.c include include include include include include char p void sys error int errnum void f...
什麼時候該使用前置宣告?
首先,我們為什麼要包括標頭檔案?問題的回答很簡單,通常是我們需要獲得某個型別的定義 definition 那麼接下來的問題就是,在什麼情 況下我們才需要型別的定義,在什麼情況下我們只需要宣告就足夠了?問題的回答是當我們需要知道這個型別的大小或者需要知道它的函式簽名的時候,我們就需要獲得它的定義。假設...
到底什麼時候該使用MQ?
mq是幹嘛的 訊息匯流排 message queue 後文稱mq,是一種跨程序的通訊機制,用於上下游傳遞訊息。在網際網路架構中,mq是一種非常常見的上下游 邏輯解耦 物理解耦 的訊息通訊服務。使用了mq之後,訊息傳送上游只需要依賴mq,邏輯上和物理上都不用依賴其他服務。什麼時候不使用訊息匯流排 mq...