偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

為什么單擊并按住標(biāo)題欄,程序運(yùn)行得更快?

商務(wù)辦公
當(dāng)你在標(biāo)題欄上單擊并按住鼠標(biāo)時(shí),窗口管理器會(huì)等待下一條鼠標(biāo)消息,以便它可以確定你是單擊標(biāo)題還是嘗試拖動(dòng)。在等待期間,窗口的繪制工作將暫時(shí)停止。

有時(shí)候,人們會(huì)發(fā)現(xiàn)這樣一個(gè)怪異現(xiàn)象:如果在執(zhí)行一項(xiàng)長(zhǎng)時(shí)間運(yùn)行的任務(wù)的時(shí)候,在標(biāo)題欄按下鼠標(biāo),這個(gè)時(shí)候,會(huì)發(fā)現(xiàn)程序運(yùn)行的更快了一些。

這件奇怪的事情通常是發(fā)生在這樣一種場(chǎng)景:當(dāng)程序花費(fèi)太多時(shí)間更新其進(jìn)度狀態(tài)而沒(méi)有足夠的時(shí)間用來(lái)做實(shí)際的計(jì)算工作。(換句話說(shuō),程序員搞砸了。)

當(dāng)你在標(biāo)題欄上單擊并按住鼠標(biāo)時(shí),窗口管理器會(huì)等待下一條鼠標(biāo)消息,以便它可以確定你是單擊標(biāo)題還是嘗試拖動(dòng)。在等待期間,窗口的繪制工作將暫時(shí)停止。這就是為什么程序運(yùn)行得更快的原因:沒(méi)有窗口繪畫(huà)意味著花在更新上的 CPU 會(huì)減少,而無(wú)論如何更新都比讀取更快。讓我們通過(guò)一個(gè)簡(jiǎn)單的例子程序來(lái)演示這個(gè)現(xiàn)象。

這個(gè)程序啟動(dòng)了一個(gè)后臺(tái)線程,它計(jì)數(shù)到 100000,并且每次數(shù)值改變時(shí)都會(huì)使前臺(tái)窗口無(wú)效。運(yùn)行它,看數(shù)字加到 100000會(huì)有多快。(當(dāng)循環(huán)結(jié)束時(shí),我添加了一個(gè)小聲音提示,所以你可以通過(guò)聽(tīng)聲音提示來(lái)判斷時(shí)間。)

現(xiàn)在再次運(yùn)行它,但這一次,單擊并按住標(biāo)題欄上的鼠標(biāo)。請(qǐng)注意,程序幾乎立即發(fā)出聲音提示:當(dāng)你按住鼠標(biāo)時(shí),它運(yùn)行得更快。這是因?yàn)樗欣L畫(huà)都被單擊并按住標(biāo)題時(shí)觸發(fā)的可能拖動(dòng)操作正在進(jìn)行中抑制。

每次增加就更新屏幕顯然是無(wú)意義的,因?yàn)樵黾拥盟俣冗h(yuǎn)遠(yuǎn)快于屏幕刷新速度,更不用說(shuō)人眼讀取速度。根據(jù)經(jīng)驗(yàn),每秒改變進(jìn)度狀態(tài)超過(guò) 10 次通常是無(wú)意義的。你在屏幕更新上付出的努力都白白浪費(fèi)了。

讓我們修改一下示例程序,使其每秒最多更新十次。我們將以 100ms 為間隔運(yùn)行計(jì)時(shí)器,檢查是否有任何更改,并重新繪制屏幕。

我們不是在每次計(jì)數(shù)器改變值時(shí)就更新屏幕,而是僅僅設(shè)置一個(gè)”嘿,有些東西改變了”的標(biāo)志,并在計(jì)時(shí)器上檢查它。我們?cè)谏a(chǎn)者線程中使用釋放語(yǔ)義來(lái)設(shè)置標(biāo)志(因?yàn)槲覀兿M诮粨Q發(fā)生之前完成所有掛起的存儲(chǔ)操作)并使用獲取語(yǔ)義在消費(fèi)者線程中清除標(biāo)志(因?yàn)槲覀儾幌M麑?lái)任何的存儲(chǔ)操作都被推測(cè)在交換之前)。

再次運(yùn)行該程序,注意它瞬間計(jì)數(shù)直到 100000。當(dāng)然,這并不能真正演示進(jìn)度計(jì)數(shù)器,因此將 Sleep(1) 插入循環(huán)中:

這足以使循環(huán)的速度變慢,因而可以看見(jiàn)遞增的值。并不是像在最初版本中看見(jiàn)的令人眼花繚亂的遞增,但是足以使人們領(lǐng)會(huì)其含義。

我用于在后臺(tái)和前臺(tái)線程之間傳遞信息的機(jī)制假定后臺(tái)更新相對(duì)頻繁,這樣計(jì)時(shí)器幾乎總會(huì)發(fā)現(xiàn)一些值得做的事情。如果混合執(zhí)行一些快速和慢速任務(wù),可以修改通信機(jī)制,這樣當(dāng)注意到一段時(shí)間沒(méi)有更新時(shí),計(jì)時(shí)器將自行關(guān)閉。后臺(tái)線程恢復(fù)更新值時(shí)需要重新啟動(dòng)計(jì)時(shí)器。我沒(méi)有費(fèi)心編寫(xiě)這種更復(fù)雜的版本,因?yàn)檫@只會(huì)分散文章的要點(diǎn)。

總結(jié)

我曾經(jīng)也想過(guò)將程序的每次狀態(tài)變更都呈現(xiàn)在用戶界面上,覺(jué)得這可以讓用戶了解程序的實(shí)時(shí)運(yùn)行狀態(tài)。但是在后來(lái)的實(shí)際體驗(yàn)中,我感覺(jué)這并不是想象中那樣美好。從用戶的角度來(lái)說(shuō),他/她所希望的事情是:趕緊幫我把活兒做完,別成天整這些花里胡哨的東西。

確實(shí)如此!畢竟大家都這么忙。

最后

Raymond Chen的《The Old New Thing》是我非常喜歡的博客之一,里面有很多關(guān)于Windows的小知識(shí),對(duì)于廣大Windows平臺(tái)開(kāi)發(fā)者來(lái)說(shuō),確實(shí)十分有幫助。本文來(lái)自:《Why does my program run faster if I click and hold the caption bar?》

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2023-09-20 00:06:30

Python代碼函數(shù)

2017-02-13 17:17:48

Android標(biāo)題欄控件

2012-09-11 09:16:52

Hadoop

2011-02-22 14:53:41

titlebar標(biāo)題欄Android

2022-06-22 10:33:06

麻省理工大學(xué)PaShUnix shell

2024-10-08 10:24:41

Python編程語(yǔ)言

2015-08-14 17:47:35

Windows 10標(biāo)題欄

2020-09-04 15:03:18

Python代碼語(yǔ)言

2021-12-14 12:10:41

ChromeWindows瀏覽器

2009-11-03 18:05:00

VB.NET窗體標(biāo)題欄

2021-06-03 05:08:19

Edge微軟瀏覽器

2017-05-03 16:30:38

AndroidScrollView滾動(dòng)視圖

2024-06-26 10:50:35

2011-05-04 10:40:02

網(wǎng)頁(yè)加載進(jìn)度標(biāo)題欄lephone

2019-03-29 09:00:11

Windows 10PC模擬器

2022-02-13 19:05:19

微軟Windows 11

2021-01-13 10:51:08

PromissetTimeout(函數(shù)

2021-09-01 13:53:19

WindowsAcrylic標(biāo)題欄

2021-04-23 15:20:54

微軟瀏覽器Windows

2013-12-19 14:16:46

Android ApiAndroid開(kāi)發(fā)Android SDK
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)