欧美亚洲综合图区在线|天天射天天干国产成卜|99久久免费国产精精品|国产的欧美一区二区三区|日韩中文字幕无码不卡专区|亚麻成人aV极品一区二区|国产成人AV区一区二区三|成人免费一区二区三区视频网站

當(dāng)前位置:首頁 > 網(wǎng)站建設(shè) > 正文內(nèi)容

phpcms前臺內(nèi)容顯示html代碼(php前臺實現(xiàn)的功能)

網(wǎng)站建設(shè)9個月前 (04-05)430

引言

今天同事問了我一個問題,System.Windows.Forms.Timer是前臺線程還是后臺線程,我當(dāng)時想的是它是跟著UI線程一起結(jié)束的,應(yīng)該是前臺線程吧?我確實沒有仔細研究過他們的異同,所以帶著這個疑問探究一下System.Windows.Forms.Timer。

System.Windows.Forms.Timer

機制

System.Windows.Forms.Timer 是 Windows Forms 中的一個定時器控件,它的工作原理基于 Windows 消息循環(huán)機制。這個Windows消息循環(huán)機制說簡單一點就是它有一個消息隊列,一個while(true) 循環(huán)結(jié)構(gòu),一個窗口消息處理函數(shù),消息隊列保存了在應(yīng)用程序或系統(tǒng)中發(fā)生的各種事件和消息,如鼠標(biāo)點擊、鍵盤輸入、窗口重繪等。循環(huán)結(jié)構(gòu)消息隊列中不斷取出消息。然后通過窗口消息處理函數(shù)分發(fā)給相應(yīng)的窗口過程進行處理。

而 System.Windows.Forms.Timer 的事件觸發(fā)機制如下:

1.Timer 控件利用 Windows 的消息機制來觸發(fā) Tick 事件。在定時器啟動后,它會在每個 Interval 時間間隔后,將一個 WM_TIMER 消息放入應(yīng)用程序的消息隊列。

2.WM_TIMER 是一個定時器消息,它是由 Windows 消息循環(huán)派發(fā)的。

3.當(dāng)應(yīng)用程序處理消息循環(huán)時,當(dāng)收到 WM_TIMER 消息,就會觸發(fā) Timer 的 Tick 事件。

源碼解析

來通過源碼看一下它的觸發(fā)機制(這里節(jié)選了部分重要函數(shù)),它的源碼還是比較簡單的,僅有300多行。我們先來看一下 System.Windows.Forms.Timer 的調(diào)用,一般是這樣使用:

我們就按照上面的步驟來剖析一下源碼:

第一步:創(chuàng)建實例

這一步并無特別,無參構(gòu)造默認(rèn)創(chuàng)建的實例默認(rèn) Interval 值為100。含參構(gòu)造創(chuàng)建時會將該實例添加到參數(shù)容器中。

展開全文

第二步:注冊Tick

System.Windows.Forms.Timer 聲明了一個 onTimer 委托,注冊 Tick 是將注冊的方法賦值給 onTimer 委托。

第三步:啟動Timer

可以看到Timer的 Start 和 Stop,實際都是給 Enabled 賦值,所以我們可以著重看一下 Enabled 屬性的 Setter 方法。

第四步:TimerNativeWindow 啟動

可以看到System.Windows.Forms.Timer 持有一個 TimerNativeWindow 類型的私有變量,是由這個私有變量啟動的Timer

第五步:TimerNativeWindow 實現(xiàn)

上一步中,可以看到當(dāng) Enable 置為 true 時,一個 TimerNativeWindow 類型的私有變量調(diào)用了 StartTimer(interval) 方法,那么來看一下這個 TimerNativeWindow 的實現(xiàn)。

如下圖,可以看到當(dāng) TimerNativeWindow 調(diào)用 StartTimer時,調(diào)用了 SafeNativeMethods.SetTimer 方法,傳入了當(dāng)前Timer的窗口句柄,還有加1后的 _timerID ,以及間隔 Interval。該方法的作用就是向Windows消息循環(huán)機制的消息隊列中插入一條Timer消息。

上圖中,我除了框出了StartTimer方法,還框出了 WndProc(ref Message m) 方法。這個方法就很重要了。這個就是上面所說的 Windows 消息循環(huán)機制中的窗口消息處理函數(shù)。WndProc(ref Message m) 方法就是一個用于處理窗口消息的回調(diào)函數(shù)。當(dāng)窗口接收到不同類型的消息時(例如鼠標(biāo)事件、鍵盤事件、繪圖事件等,包括Timer的觸發(fā)事件),窗口過程會被調(diào)用來處理這些消息并作出相應(yīng)的響應(yīng)。

大家可能會很好奇該方法中的兩個判斷條件是什么意思?275 和 16 分別代表什么?

phpcms前臺內(nèi)容顯示html代碼(php前臺實現(xiàn)的功能)

實際上這個是Windows消息標(biāo)識符的十進制值。實際上他們是在名為 WinUser.h 的c++ 頭文件中定義的。它隨SDK一起安裝到電腦上,可以通過Everything 直接找到它。

而我們要找的消息 275 和 16 就是下面這兩個

WM_TIMER :其16進制為0x0113,轉(zhuǎn)化為10進制則為275。

WM_CLOSE :其16進制為0x0010,轉(zhuǎn)化為10進制則為16。

這樣就可以理解WndProc(ref Message m) 方法的作用了,就是獲取到 WM_TIMER 消息時,觸發(fā) System.Windows.Forms.Timer 的 OnTick 方法。而獲取到 WM_CLOSE 消息時,則調(diào)用 StopTimer,結(jié)束定時器。

結(jié)論

通過上面的機制和源碼分析,可以得出結(jié)論,System.Windows.Forms.Timer 并不是線程,而是依賴于UIx線程,依賴于Windows消息循環(huán)機制而實現(xiàn)的定時器。所以回到開篇的問題,這個問題就有問題,System.Windows.Forms.Timer 并不是線程。

出處:duidaima.com/Group/Topic/ASP.NET/14727

版權(quán)聲明:本文來源于網(wǎng)友收集或網(wǎng)友供稿,僅供學(xué)習(xí)交流之用,如果有侵權(quán),請轉(zhuǎn)告小編或者留言,本公眾號立即刪除。

關(guān)注公眾號 ↑ ↑ ↑: DotNet開發(fā)跳槽 ?

點分享

點收藏

點點贊

點在看

掃描二維碼推送至手機訪問。

版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請注明出處。

本文鏈接:http://landcheck.net/post/102867.html

“phpcms前臺內(nèi)容顯示html代碼(php前臺實現(xiàn)的功能)” 的相關(guān)文章

雙減下的作業(yè)設(shè)計思路(雙減下的作業(yè)設(shè)計思路二年級語文)

雙減下的作業(yè)設(shè)計思路(雙減下的作業(yè)設(shè)計思路二年級語文)

今天給各位分享雙減下的作業(yè)設(shè)計思路的知識,其中也會對雙減下的作業(yè)設(shè)計思路二年級語文進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、雙減分層布置作業(yè)策略是什么? 2、談?wù)勲p減背景下如何設(shè)計作業(yè) 3、雙減政策下如何有效布置作業(yè) 4、雙減政策下如何有效...

html制作小米官方登錄界面(小米登錄頁面html)

html制作小米官方登錄界面(小米登錄頁面html)

本篇文章給大家談?wù)刪tml制作小米官方登錄界面,以及小米登錄頁面html對應(yīng)的知識點,希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、小米官網(wǎng)怎么進入? 2、id.mi.com登錄 3、為什么小米刷機后就沒有了小米帳號登錄界面? 小米官網(wǎng)怎么進入? 小米官網(wǎng)打開以及登錄進入可...

大學(xué)生兼職家教自我介紹模板海報(家教兼職簡歷自我介紹)

大學(xué)生兼職家教自我介紹模板海報(家教兼職簡歷自我介紹)

本篇文章給大家談?wù)劥髮W(xué)生兼職家教自我介紹模板海報,以及家教兼職簡歷自我介紹對應(yīng)的知識點,希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、家教簡歷自我介紹應(yīng)該怎么寫? 2、做家教的自我介紹 3、家教簡歷的自我介紹范文 家教簡歷自我介紹應(yīng)該怎么寫? 家教的自我介紹主要是說明自己的...

WPS還有免費模板嗎(wps還有免費模板嗎怎么用)

WPS還有免費模板嗎(wps還有免費模板嗎怎么用)

本篇文章給大家談?wù)刉PS還有免費模板嗎,以及wps還有免費模板嗎怎么用對應(yīng)的知識點,希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、wps是免費的嗎? 2、WPS稻殼兒的開通會員已下載的模板,后期沒續(xù)費后那模板還可以用嗎? 3、WpS超級模板收費嗎 4、wps2019版是免...

虛擬人物制作軟件手機版(虛擬人物制作軟件手機版下載)

虛擬人物制作軟件手機版(虛擬人物制作軟件手機版下載)

今天給各位分享虛擬人物制作軟件手機版的知識,其中也會對虛擬人物制作軟件手機版下載進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、洛少爺虛擬人物怎么弄 2、想制作一個虛擬人物怎么制作!拜托 3、手機虛擬形象軟件怎么弄? 4、ZegoAvatar可以...

設(shè)計概念論述怎么寫(設(shè)計概念論述怎么寫的)

設(shè)計概念論述怎么寫(設(shè)計概念論述怎么寫的)

本篇文章給大家談?wù)勗O(shè)計概念論述怎么寫,以及設(shè)計概念論述怎么寫的對應(yīng)的知識點,希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、設(shè)計理念怎么寫 2、建筑設(shè)計概念怎么寫? 3、作品設(shè)計理念怎么寫? 4、設(shè)計的概念是什么 5、設(shè)計理念怎么寫? 6、設(shè)計的基本概念? 設(shè)計理...

吉安县| 天全县| 南郑县| 左权县| 昭觉县| 长宁县| 苍溪县| 长阳| 前郭尔| 平安县| 黄浦区| 娄底市| 龙口市| 刚察县| 常熟市| 科技| 武汉市| 略阳县| 大厂| 尤溪县| 罗城| 巴彦县| 田阳县| 柯坪县| 开封县| 桂阳县| 余庆县| 宁德市| 兴隆县| 临邑县| 荆州市| 西华县| 栖霞市| 麻阳| 石嘴山市| 凤山市| 利辛县| 拉孜县| 连山| 大化| 和平区|