4--winodws編程的核心函數
實際上我是從delphi的RAD工具走上windows編程這條道上,所以最初我接觸到了windows編程是非常簡單的。在很長一段時間,我並沒有使用過真正意義上的windowsAPI函數,delphi強大的VCL架構屏蔽了一切。讓我對於windows編程上面理解很是片面,很是膚淺。我一直以為拖動幾個控制項寫幾個事件代碼就是windows編程。直到後來我看到我一同事用VC寫程式,我從編輯器裡看到了一些我從未看到過的代碼,那樣的過程讓我引起一陣陣的恐慌。在對windows系統運行機制並不是熟悉的情況下,WINDOWS編程是一本很難啃下的骨頭,尤其後來做到多線程訊息通訊編程和IOCP編程時發現了這方面的不足。
但最為關鍵的還是要知道原理,知道windows視窗處理的機制到底是怎麼一回事,把這個搞明白了。再看看這些那些核心的API函數也不難理解了!那些年時常看到許多人在簡曆中寫精通windows編程,其實真正精通windows又能有幾人了。不過真正理解windows編程是可以通過幾個函數加深理解的,而這些都又跟作業系統原理相關的。以這些函數為切入點,深入進去也許你會發現會簡單些。我對於windows的重新瞭解都是從我那筆陳年舊賬的解決過程開始的,一切都是基於windows系統進程的狀態開始的。所以我對於這幾個函數很有印象。
WaitForSingleObject()
官方的解釋為:該函數用來檢測hHandle事件的訊號狀態,在某一線程中調用該函數時,線程暫時掛起,如果在掛起的dwMilliseconds毫秒內,線程所等待的對象變為有訊號狀態,則該函數立即返回;如果逾時時間已經到達dwMilliseconds毫秒,但hHandle所指向的對象還沒有變成有訊號狀態,函數照樣返回。參數dwMilliseconds有兩個具有特殊意義的值:0和INFINITE。若為0,則該函數立即返回;若為INFINITE,則線程一直被掛起,直到hHandle所指向的對象變為有訊號狀態時為止。
官方描述非常專業,實際理解起來卻很是簡單:其實這個函數就是在等待時間發生時使用的,該函數就是讓自己STOP,等待事件發生而已。
GetTickCount()
官方解釋為:從作業系統啟動到現在所經過(elapsed)的毫秒數,它的傳回值是DWORD。一般用於即時控制,該方法運用比較多。當然該方法你如果覺得還不夠精確,如果需要更精確的話,那就需要另外Q的QueryPerformanceFrequency()和QueryPerformanceCounter()方法,該方法可更用於基於CPU轉精度所需的資料
最後是Sleep()方法了,該方法就是讓當前線程進行休眠狀態,也是通常我們說起的掛起。線上程編碼中,該方法是用頻率很多的,尤其在迴圈裡面。我對自己所學的東西進行的反思就是從這個小小的sleep()開始的。在技術研發的路上,切誤輕視一切你認為非常簡單,但是正是這樣的簡單讓你有時候卻一籌莫展。
(未完待續.........)