♥ 學習筆記Learning 程式語言 Coding

[程式] QT – Chap. 7 Event Processing + Chap. 14 Multithreading

因為需要支援後續的實作,蕾咪必須學會幾樣東西,包含Multithreading、Network protocol、XML等,但是在了解第14章的Multithreading之前,最好先了解第七章的Event Processing概念,對於整體的概念會有更多的了解;本系列筆記是蕾咪為了幫助自己理解,而摘自C++ GUI Programming with Qt 4, Second Edition一書。

因為完全是為了做中學(Learning by Doing),因此並未以完整翻譯全書為考量,單純就所需要的部分做理解,歡迎一起討論,若是感到內文較無系統也請見諒囉!^_________^

本串文章理解順序為:

Chap. 7  Event Processing
7.1 Reimplementing Event Handlers
7.2 Installing Event Filters
7.3 Staying Responsive during Intensive Processing

Chap. 14 Multithreading
14.1  Creating Threads
14.2  Synchronizing Threads
14.3  Communicating with the Main Thread
14.4  Using Qt’s Classes in Secondary Threads

 

※正文開始

第七章 事件處理(Event Processing)

當視窗程式或QT在做各式回應時,將會產生所謂的事件(Event);也就是說,當一個使用者按下一個按鍵或是按下滑鼠紐,一個滑鼠或按鍵事件就產生了;例如,在一個視窗程式剛被顯示出來時,一個繪圖事件也會告訴新產生的視覺化視窗程式說,這視窗程式需要能夠畫畫。大部分的事件都是為了回應使用者行為而產生的,但是有些事件,像是計時事件(timer events)則是獨立被系統所產生。

當我們利用QT來寫程式時,我們很少需要去思考事件,因為當有些訊息發生時,QT部件(QT Widget)會傳送訊號;當我們需要寫下自定義的部件(Custom widgets)或我們想去修改一些既有的QT部件,事件才會變成一個非常有用的概念。

事件(Event)不應該跟訊號(Signal)的概念混淆。
當你使用一個小部件(using a widget)時,訊號(Signal)是非常的有用。
當你實作一個小部件(implementing a widget)時,事件(Event)則變得非常有用。

舉例來說,當我們使用QPushButton時,我們會注意它的clicked()訊號,而不是更底層的滑鼠與鍵盤事件會造成訊號傳送。但是,當我們要實作一個QPushButton這樣的類別時,我們需要寫程式去處理滑鼠或鍵盤事件,讓它們在必要的時候傳送clicked()訊號。

 

第7.1節 重新實作事件處理(Reimplementing Event Handlers)
第7.2節 安裝事件過濾器(Installing Event Filters)
第7.3節 在回應時即時處理(Staying Responsive during Intensive Processing)

 

第十四章 多執行緒(Multithreading)

一般的GUI應用程式擁有一個執行緒,並且一次執行一個操作。如果使用者執行一個耗時的功能時,當那個功能正在運行中,使用者介面通常就會停滯在那裡。第七章針對這個問題提出了一些解法,而多執行緒則是另一個解決方法。

註:GUI = Graphical User Interface,圖形化使用者介面

在多執行緒(Multithreading)的應用程式中,GUI會在一至多個執行緒中,執行它自己的執行緒與其他額外的處理程序。這樣的結果將會反映在GUI需要密集的處理程序。當執行在單一處理器(單核)時,因為多執行緒有額外的成本,因此多執行緒應用程式可能會跑得比單一執行緒的應用程式還要慢。但是,多處理器(多核)的系統越來越普遍,多執行緒應用程式可以同時執行在多個處理器上,來獲得更好的效能。

在這個章節裡,我們將會開始介紹QThread的子類別,並且學習如何使用QMutex、QSemaphore和QWaitCondition去同步執行緒。然後,我們將開始了解如何在事件迴圈執行時,讓主要執行緒(main thread)與輔助執行緒們(Secondary threads)溝通。最後,我們將會約略的總結Qt類別,哪可以使用在輔助執行緒、而哪些不行。

多執行緒本身是一個很大的課題,有很多專門的書在探討。
例如:
Threads Primer: A Guide to Multithreaded Programming
by Bil Lewis and Daniel J. Berg (Prentice Hall, 1995)

Multithreaded, Parallel, and Distributed Programming
by Gregory Andrews (Addison-Wesley, 2000).

這裡假設你已經了有一些多執行緒編程的基礎,所以重點放在解是如何開發多執行緒的QT應用程式,而不是介紹多執行緒本身。

以下有四小節,分別是

第14.1節 建立執行緒(Creating Threads )
第14.2節 同步執行緒(Synchronizing Threads)
第14.3節 與主要執行緒溝通(Communicating with the Main Thread )
第14.4節 在輔助執行緒上使用Qt類別 (Using Qt’s Classes in Secondary Threads)

 

以上,努力理解中囉!
蕾咪其實沒有多執行緒編程的基礎,所以希望之後能克服啦!
這兩章有些微目的相關,因此蕾咪決定一起閱讀,如果翻譯有誤或模糊之處,歡迎指教!感恩~~~

About the author

蕾咪

蕾咪,來自台東,卻不定期旅居歐洲的工程師女孩,身兼作家、部落客、創業家等多重身份。畢業於台大電子所,曾在義大利商與美商擔任研發工程師;走訪世界後,發現對台灣有段割捨不了的愛,讓我們一起努力成為想要的自己吧!:) 合作邀稿請聯繫:ramihaha@gmail.com

Leave a Comment