成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么單擊并按住標(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)長時(shí)間運(yùn)行的任務(wù)的時(shí)候,在標(biāo)題欄按下鼠標(biāo),這個(gè)時(shí)候,會(huì)發(fā)現(xiàn)程序運(yùn)行的更快了一些。

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

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

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

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

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

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

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

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

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

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

總結(jié)

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

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

最后

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

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(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編程語言

2015-08-14 17:47:35

Windows 10標(biāo)題欄

2020-09-04 15:03:18

Python代碼語言

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)頁加載進(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開發(fā)Android SDK
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 久久成人国产精品 | 欧美综合在线视频 | 国产精品国产三级国产aⅴ中文 | 亚洲精品久久嫩草网站秘色 | 九七午夜剧场福利写真 | 欧美黄色片 | 麻豆天堂 | 欧美日韩高清在线观看 | 91精品国产综合久久久久久丝袜 | 伊人网综合 | 日韩三| 国内久久 | 成人蜜桃av| 男人天堂视频在线观看 | 在线一区视频 | 成人国产精品色哟哟 | 黄色一级视频免费 | 青青久久| 久久999 | 国产中文在线 | 久久国产成人 | av黄色片 | 奇米四色在线观看 | 成人av免费在线观看 | 91久久精品一区二区二区 | 三级在线视频 | jdav视频在线观看免费 | 国产999精品久久久 精品三级在线观看 | 91大神新作在线观看 | 精品一级毛片 | 久久免费精品 | 国产一区二区三区视频 | 午夜欧美一区二区三区在线播放 | 成人在线a | 国内精品视频免费观看 | 激情欧美日韩一区二区 | 中文字幕第十一页 | 爱爱小视频 | 国产精品久久久久久久久久久久午夜片 | 国产精品美女久久久av超清 | 91久久精品日日躁夜夜躁欧美 |