<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 17.1 什么時候使用多線程,什么時候不要使用 線程基本上來說是你的應用程序中一條單獨的執行路徑.有些地方把線程成為輕量級的進程,但是線程和進程有著一個最本質的區別,那就是:進程是在不同的地址空間運行的,而同一個進程內的所有的線程都在同一個地址空間運行. 當然這樣的好處是,同一個進程的線程互相訪問公共的數據是非常方便的,不過這也造成了另外一個經常犯錯誤的地方,就是很一個數據很容易被多個線程同時訪問,造成不可知的后果,因此強烈推薦對于這些數據的訪問,必須小心的使用用于同步變量訪問的變量,比如信號量和關鍵區域. 如果使用的當,多線程編程可以簡化應用程序的體系結構,并且將用戶界面和其后面的真實世界分割開來.注意這通常不會讓你的應用程序運行的更快,除非你有多個處理器,但是用戶界面通常會變得更靈敏. wxWidgets既提供了線程的支持,也提供了信號量和帶條件的關鍵區域的支持.其線程API主要參考的是pthread(POSIX線程)模型,不過某些API采用了不同的名字,而另外一些API則吸收了部分Win32線程API的靈感. 這些類使得編寫多線程的程序變得簡單,并且還提供了相對于本地線程API更多的錯誤檢查.盡管如此,多線程編程仍然不是一個很簡單的事情,對于大型的項目尤其如此.因此,在考慮編寫新的多線程程序或者在舊的代碼中加入多線程之前,仔細的考慮一下是不是應該采取可選的替代方案來實現同樣的功能,是一件很值得一做的事情.在有些情況下,線程是唯一最優的選擇,比如對于一個FTP服務器來說,為每一個新的連接創建一個線程,但是,如果只是增加一個線程來為某個長時間的運算顯示一個進度條來說,這種線程的時候就有點過猶不及了.在這種情況下,你可以將計算任何放在系統空閑的時候進行,并且周期性的調用wxWindow::Update來更新用戶界面就可以了.關于這個問題更詳細的描述,請參考本章的最后一節,"多線程的替代方案"中的描述. 如果你還是決定在你的代碼中使用多線程,我們強烈建議你只在你的主線程中調用所有和GUI有關的函數.盡管wxWidgets自帶的線程例子中演示了怎樣在多個線程中同時調用GUI函數,但是,一般來說,這是非常非常差勁的設計.一個主線程負責GUI,其它多個線程負責別的計算工作,他們之間通過事件互相通訊,這樣的設計是更好的設計并且通常可以避免很多的錯誤從而節約你大量的調試的時間.比如說,在Win32平臺上,線程只能使用由自己而不是別的線程創建的GUI對象(畫筆,畫刷之類). 要實現線程之間通訊,你可以使用wxEvtHandler::AddPendingEvent函數或者它的簡化版本wxPostEvent,這些函數被設計成線程安全的因此你可以使用他們在線程之間發送事件.
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看