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

為什么單擊并按住標題欄,程序運行得更快?

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

有時候,人們會發現這樣一個怪異現象:如果在執行一項長時間運行的任務的時候,在標題欄按下鼠標,這個時候,會發現程序運行的更快了一些。

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

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

這個程序啟動了一個后臺線程,它計數到 100000,并且每次數值改變時都會使前臺窗口無效。運行它,看數字加到 100000會有多快。(當循環結束時,我添加了一個小聲音提示,所以你可以通過聽聲音提示來判斷時間。)

現在再次運行它,但這一次,單擊并按住標題欄上的鼠標。請注意,程序幾乎立即發出聲音提示:當你按住鼠標時,它運行得更快。這是因為所有繪畫都被單擊并按住標題時觸發的可能拖動操作正在進行中抑制。

每次增加就更新屏幕顯然是無意義的,因為增加得速度遠遠快于屏幕刷新速度,更不用說人眼讀取速度。根據經驗,每秒改變進度狀態超過 10 次通常是無意義的。你在屏幕更新上付出的努力都白白浪費了。

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

我們不是在每次計數器改變值時就更新屏幕,而是僅僅設置一個”嘿,有些東西改變了”的標志,并在計時器上檢查它。我們在生產者線程中使用釋放語義來設置標志(因為我們希望在交換發生之前完成所有掛起的存儲操作)并使用獲取語義在消費者線程中清除標志(因為我們不希望將來任何的存儲操作都被推測在交換之前)。

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

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

我用于在后臺和前臺線程之間傳遞信息的機制假定后臺更新相對頻繁,這樣計時器幾乎總會發現一些值得做的事情。如果混合執行一些快速和慢速任務,可以修改通信機制,這樣當注意到一段時間沒有更新時,計時器將自行關閉。后臺線程恢復更新值時需要重新啟動計時器。我沒有費心編寫這種更復雜的版本,因為這只會分散文章的要點。

總結

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

確實如此!畢竟大家都這么忙。

最后

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

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-09-20 00:06:30

Python代碼函數

2017-02-13 17:17:48

Android標題欄控件

2012-09-11 09:16:52

Hadoop

2011-02-22 14:53:41

titlebar標題欄Android

2015-08-14 17:47:35

Windows 10標題欄

2022-06-22 10:33:06

麻省理工大學PaShUnix shell

2024-10-08 10:24:41

Python編程語言

2020-09-04 15:03:18

Python代碼語言

2021-12-14 12:10:41

ChromeWindows瀏覽器

2009-11-03 18:05:00

VB.NET窗體標題欄

2021-06-03 05:08:19

Edge微軟瀏覽器

2017-05-03 16:30:38

AndroidScrollView滾動視圖

2011-05-04 10:40:02

網頁加載進度標題欄lephone

2024-06-26 10:50:35

2019-03-29 09:00:11

Windows 10PC模擬器

2022-02-13 19:05:19

微軟Windows 11

2021-01-13 10:51:08

PromissetTimeout(函數

2021-09-01 13:53:19

WindowsAcrylic標題欄

2021-04-23 15:20:54

微軟瀏覽器Windows

2013-12-19 14:16:46

Android ApiAndroid開發Android SDK
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久毛片 | 久久精品毛片 | 亚洲不卡视频 | 日本一区二区高清不卡 | 精品久久久久久久人人人人传媒 | 国产91久久久久蜜臀青青天草二 | av大片 | 午夜精品视频 | 一区二区三区影院 | 欧美日韩精品在线一区 | 二区久久| 久久精品一区二区三区四区 | 欧美a在线 | 久久噜噜噜精品国产亚洲综合 | www.国产一区 | 一区二区三区国产精品 | 黄网站免费在线 | 一级一片在线观看 | 一级黄色片免费在线观看 | 97成人在线 | 日韩中文欧美 | 日本精品一区二区 | 欧美成年黄网站色视频 | 日韩精品极品视频在线观看免费 | 日本一区二区三区精品视频 | 亚洲视频中文字幕 | 91麻豆精品国产91久久久更新资源速度超快 | 欧美成人免费在线 | 美女爽到呻吟久久久久 | 国产精品高清一区二区三区 | 亚洲视频免费在线观看 | 亚洲成人精品一区二区 | 欧美性久久 | 国产h在线| 成年人在线观看 | 一区二区三区国产视频 | 亚洲日本三级 | 国产精品观看 | 日本视频中文字幕 | 久久a久久 | 日韩aⅴ在线观看 |