QT學習之多線程

    • 【爲何要用多線程?】java

      傳統的圖形用戶界面應用程序都只有一個執行線程,而且一次只執行一個操做。若是用戶從用戶界面中調用一個比較耗時的操做,當該操做正在執行時,用戶界面一般會凍結而再也不響應。這個問題能夠用事件處理和多線程來解決。linux

    • Linux有線程的概念嗎?】多線程

      傳統的UNIX系統也支持線程的概念,但一個進程裏只容許有一個線程,這樣多線程就是多進程。Linux下的Posix線程(pthreads)是一種輕量級的進程的移植性實現,線程的調度由內核完成,每一個線程都有本身的編號。若是使用線程,整體消耗的系統資源較少,線程間通訊也比較容易,在工程中推薦使用線程。函數

    • 【使用多線程有什麼好處?】spa

      1. 提升應用程序的響應速度。這對於開發圖形界面程序尤爲重要,當一個操做耗時很長時(好比大批量I/O或大量矩陣變換等CPU密集操做),整個系統都會等待這個操做,程序就不能響應鍵盤、鼠標、菜單等操做,而使用多線程技術可將耗時長的操做置於一個新的線程,從而避免上述問題。
      2. 使多CPU系統更加有效。當線程數不大於CPU數目時,操做系統能夠調度不一樣的線程運行於不一樣的CPU上。
      3. 改善程序結構。一個既長又複雜的進程能夠考慮分爲多個線程,成爲獨立或半獨立的運行部分,這樣有利於程序的理解和

    • 【QT的簡單多線程
      • 簡單實現:qt的多線程和java有着相似的地方:也是start和run兩個函數執行。先是建立多個線程對象,每一個對象中都會有一個run函數(運行程序),咱們直接循環的調用start函數進行啓動每一個對象線程,這樣就能實現多線程了。
      • 代碼示例:
        View Code
        View Code

    • 【多線程的互斥方法
      • QT爲多線程的互斥和同步機制提供了幾個類,掌握好這幾個類對於互斥和同步機制理解應該不是難事。
        • 首先咱們對互斥和同步機制必須有必定的瞭解,而且對於他們兩個相關的一些經常使用名稱必須知道是什麼意思。(這些東西在操做系統中應該都有介紹)

      • QMutex類:對互斥量進行處理
        • 對互斥量進行處理,保護臨界區的代碼(利用lock和unlock進行上鎖解鎖操做,trylock操做嘗試解鎖)

      • QMutexLocker類
        • 簡化互斥量的處理,在構造函數中接受一個QMutex對象而且將其鎖定,在析構函數中進行解鎖。這樣就實現了鎖的自動化處理,不用擔憂解鎖問題(相似java)

      • 信號量   Qsemaphore類
        • 信號量能夠獲取屢次,而互斥量只能鎖定一次,信號量通常用來保護必定數量的同種資源(一個存儲區的蛋糕數量(生產者消費者問題--環形緩衝區))
        • 這個問題操做系統這麼課上已經講過不少次原理了,因此這裏直接上代碼了。
        • 信號量實例:
          View Code
      • 線程等待與喚醒機制    QWaitCondition
        • 容許線程在必定的條件下喚醒其餘線程
        • 代碼實例:
          View Code



    • 【多線程應用
      • 代碼太長,不變貼出,見書本:421頁左右
相關文章
相關標籤/搜索