C++ 學(xué)習(xí)之旅 Windows程序內(nèi)部運(yùn)行原理
學(xué)習(xí)C++與.net不同的是,一定要搞清楚Windows程序內(nèi)部運(yùn)行原理,因?yàn)樗婕按蠖鄶?shù)是操作系統(tǒng)的調(diào)用,而.net畢竟是在.netFrameWork上唱戲。
那Windows應(yīng)用程序,操作系統(tǒng),計(jì)算機(jī)硬件之間的相互關(guān)系究竟什么了,下面的圖就給予很好的解釋。
向下箭頭①是 應(yīng)用程序運(yùn)行判斷處理的結(jié)果,輸出到輸出的設(shè)備。
向上箭頭②是輸入設(shè)備,輸入到操作系統(tǒng)中。
向下箭頭③代表API,我們要解釋以下API是什么。API是應(yīng)用程序接口, 表示應(yīng)用程序可以通知操作系統(tǒng)執(zhí)行某個(gè)具體的動(dòng)作,如操作系統(tǒng)能夠控制聲卡發(fā)出聲音,但它并不知應(yīng)該何時(shí)發(fā)出何種聲音,需要應(yīng)用程序告訴操作系統(tǒng)該發(fā)出什么樣的聲音。這個(gè)關(guān)系好比有個(gè)機(jī)器人能夠完成行走的功能,但是,如果人們不告訴它往哪個(gè)方向上走,機(jī)器人是不會(huì)主動(dòng)行走的。這里的機(jī)器人就是操作系統(tǒng),人們就是應(yīng)用程序。 對程序員來說,就可以理解為可以調(diào)用函數(shù)庫,C++程序員是對操作系統(tǒng)的同用。Java中調(diào)用的API是jdk中提供的函數(shù)庫,而。net程序員則是.netframework提供的函數(shù)庫。
向上的箭頭④表示操作系統(tǒng)能夠?qū)⑤斎朐O(shè)備的變化上傳給應(yīng)用程序。如用戶在某個(gè)程序活動(dòng)時(shí)按敲了一下鍵盤,操作系統(tǒng)馬上能夠感知到這一事件,并且能夠知道用戶按下的哪一鍵,操作系統(tǒng)并不決定對這一事件如何作出反應(yīng),而是將這一事件轉(zhuǎn)交給應(yīng)用程序,由應(yīng)用程序決定如何對這一事件作出反應(yīng)。好比有個(gè)司機(jī)開車看見前面遇到一輛車,我們的神經(jīng)末梢(相當(dāng)于操作系統(tǒng))馬上感知到這一事件,并傳遞給了我們的大腦(相當(dāng)于應(yīng)用程序),我們的大腦最終決定如何對這一事件作出反應(yīng),如將踩剎車,停下來,或是英勇撞上去(則是一個(gè)sb做法)。對事件作出反應(yīng)。
操作系統(tǒng)是怎樣將感知到的事件傳遞給應(yīng)用程序的呢?這是通過消息機(jī)制(Message)來實(shí)現(xiàn)的。操作系統(tǒng)將每個(gè)事件都包裝成一個(gè)稱為消息的結(jié)構(gòu)體MSG來傳遞給應(yīng)用程序,參看MSDN。
MSG結(jié)構(gòu)定義如下:
typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG;的過程就是消息響應(yīng)。
其實(shí),寫在這里,作為一個(gè)做過3年.net開發(fā)人員。我這里有感而發(fā),C++是如此,.net事件響應(yīng)的機(jī)制。何嘗不是一個(gè)消息機(jī)制。 消息機(jī)制,是程序界一大質(zhì)的飛躍,而也是這種消息機(jī)制,把.net程序員的控件封裝太死, 也造就一大批只能拖控件的程序員。 我學(xué)了C++還是真的有一種豁然開朗的感覺。.net程序員,還是多看點(diǎn)C++吧!
相關(guān)文章
opengl實(shí)現(xiàn)任意兩點(diǎn)間畫圓柱體
這篇文章主要為大家詳細(xì)介紹了opengl實(shí)現(xiàn)任意兩點(diǎn)間畫圓柱體,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06C語言全方位講解指針與地址和數(shù)組函數(shù)堆空間的關(guān)系
指針是C語言中一個(gè)非常重要的概念,也是C語言的特色之一。使用指針可以對復(fù)雜數(shù)據(jù)進(jìn)行處理,能對計(jì)算機(jī)的內(nèi)存分配進(jìn)行控制,在函數(shù)調(diào)用中使用指針還可以返回多個(gè)值2022-04-04C語言中用于產(chǎn)生隨機(jī)數(shù)的函數(shù)使用方法總結(jié)
這篇文章主要介紹了C語言中用于產(chǎn)生隨機(jī)數(shù)的函數(shù)使用方法總結(jié),分別介紹了rand()函數(shù)和srand()函數(shù)以及封裝出的arc4random()函數(shù),需要的朋友可以參考下2016-05-05MATLAB中subplot函數(shù)的語法與使用實(shí)例
subplot()是將多個(gè)圖畫到一個(gè)平面上的工具,下面這篇文章主要給大家介紹了關(guān)于MATLAB中subplot函數(shù)的語法與使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08C++數(shù)據(jù)結(jié)構(gòu)模板進(jìn)階的多方面分析
今天我要給大家介紹C++中的模板更深的一些知識(shí)。有關(guān)于非類型的模板參數(shù)和模板特化的一些知識(shí),感興趣的朋友快來看看吧2022-02-02