天天看點

C++ 學習之旅一——Windows程式内部運作原理

      學習c++與.net不同的是,一定要搞清楚windows程式内部運作原理,因為他所涉及大多數是作業系統的調用,而.net畢竟是在.netframework上唱戲。

       那windows應用程式,作業系統,計算機硬體之間的互相關系究竟什麼了,下面的圖就給予很好的解釋。

C++ 學習之旅一——Windows程式内部運作原理

      向下箭頭①是 應用程式運作判斷處理的結果,輸出到輸出的裝置。

      向上箭頭②是輸入裝置,輸入到作業系統中。

      向下箭頭③代表api,我們要解釋以下api是什麼。api是應用程式接口, 表示應用程式可以通知作業系統執行某個具體的動作,如作業系統能夠控制聲霸卡發出聲音,但它并不知應該何時發出何種聲音,需要應用程式告訴作業系統該發出什麼樣的聲音。這個關系好比有個機器人能夠完成行走的功能,但是,如果人們不告訴它往哪個方向上走,機器人是不會主動行走的。這裡的機器人就是作業系統,人們就是應用程式。 對程式員來說,就可以了解為可以調用函數庫,c++程式員是對作業系統的同用。java中調用的api是jdk中提供的函數庫,而。net程式員則是.netframework提供的函數庫。

     向上的箭頭④表示作業系統能夠将輸入裝置的變化上傳給應用程式。如使用者在某個程式活動時按敲了一下鍵盤,作業系統馬上能夠感覺到這一事件,并且能夠知道使用者按下的哪一鍵,作業系統并不決定對這一事件如何作出反應,而是将這一事件轉交給應用程式,由應用程式決定如何對這一事件作出反應。好比有個司機開車看見前面遇到一輛車,我們的神經末梢(相當于作業系統)馬上感覺到這一事件,并傳遞給了我們的大腦(相當于應用程式),我們的大腦最終決定如何對這一事件作出反應,如将踩刹車,停下來,或是英勇撞上去(則是一個sb做法)。對事件作出反應。

      作業系統是怎樣将感覺到的事件傳遞給應用程式的呢?這是通過消息機制(message)來實作的。作業系統将每個事件都包裝成一個稱為消息的結構體msg來傳遞給應用程式,參看msdn。 msg結構定義如下: typedef struct tagmsg { hwnd hwnd; uint message; wparam wparam; lparam lparam; dword time; point pt; } msg;的過程就是消息響應。  

     其實,寫在這裡,作為一個做過3年.net開發人員。我這裡有感而發,c++是如此,.net事件響應的機制。何嘗不是一個消息機制。 消息機制,是程式界一大質的飛躍,而也是這種消息機制,把.net程式員的控件封裝太死, 也造就一大批隻能拖控件的程式員。 我學了c++還是真的有一種豁然開朗的感覺。.net程式員,還是多看點c++吧!