在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

幾種Qt種延時處理方法

strongerHuang ? 來源:CSDN ? 作者:CSDN ? 2022-05-31 09:30 ? 次閱讀

嵌入式軟件開發過程中,基本都會用到“延時”,本文分享幾種Qt種延時處理方法。

一、阻塞型延時

阻塞的原理就是:在延時期間,本線程的事件循環得不到執行。

1、QThread類的sleep()

最簡單的延時方法就是使用QThread類的sleep(n)、msleep(n)、usleep(n),這幾個函數的不良后果就是,GUI會在延時的時間段內失去響應,界面卡死,所以,這三個函數一般用在非GUI線程中。

QThread::msleep(50);//阻塞延時50ms

2、使用定時器:死等

voidDelay_MSec_Suspend(unsignedintmsec)
{
QTime_Timer=QTime::currentTime().addMSecs(msec);
while(QTime::currentTime()

二、非阻塞延時

原理無非就是利用事件循環,有兩種原理:

1、處理本線程的事件循環

在等待中,不斷強制進入當前線程的事件循環,這樣可以把堵塞的事件都處理掉,從而避免程序卡死

voidDelay_MSec(unsignedintmsec)
{
QTime_Timer=QTime::currentTime().addMSecs(msec);
while(QTime::currentTime()
2、使用子事件循環

創建子事件循環,在子事件循環中,父事件循環仍然是可以執行的

voidDelay_MSec(unsignedintmsec)
{
QEventLooploop;//定義一個新的事件循環
QTimer::singleShot(msec,&loop,SLOT(quit()));//創建單次定時器,槽函數為事件循環的退出函數
loop.exec();//事件循環開始執行,程序會卡在這里,直到定時時間到,本循環被退出
}

三、耗時代碼的處理

假設有這樣的應用情景:點擊某個button之后,需要讀入并處理一幅圖像,需要耗時20秒才能處理完。

在這20s內,GUI會失去效應,界面上的任何元素都無法被點擊,這種情況應該怎么辦?方法有兩種:1、用另一個線程去處理這個耗時任務;2、在耗時任務中,不斷地去處理本線程的事件循環,以保證GUI的及時響應。

for(i=0;ifor(j=0;j

一般來說,processEvents()不宜被調用的過于頻繁,也不宜被調用的不夠頻繁。過于頻繁的話,一方面會使線程的響應更好,但另一方面會導致原本就耗時的任務變得更加耗時;不夠頻繁的話,顯然可能會使GUI線程的響應變差,例如每500ms才被調用一次,那么GUI的事件循環就只能500ms才被處理一次,當然,這個問題可以通過設定processEvents()的第二個形略微得到緩解,更好的做法是,保證被調的周期<200ms(再小一些更好,看程序需求),這樣不至于肉眼可見的卡頓。

副作用:(特別注意!)

1、在點擊按鈕之后,這個20s的耗時任務開始執行,尚未執行完畢時,我們點擊了GUI的關閉按鈕,那么GUI會立即消失,但是這個耗時任務仍然會在后臺執行,直到執行完畢,進程才會退出。解決辦法:重寫關閉事件,在關閉事件的函數中直接結束進程。

2、在點擊按鈕之后,這個20s的耗時任務開始執行,執行到第5秒時,我們再次點擊了這個按鈕,那么QT又會執行一個新的20s任務,這個新任務完成后,又會接著把第一個20s任務從上次被打斷的第5秒繼續執行。如果這個任務是可重入的,后果僅僅是被執行了兩遍,如果任務不可重入,那情況就徹底糟糕了。解決辦法:點擊按鈕后把這個按鈕disable掉,執行完再enable

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 延時
    +關注

    關注

    0

    文章

    108

    瀏覽量

    25740
  • 函數
    +關注

    關注

    3

    文章

    4363

    瀏覽量

    63710
  • 嵌入式軟件
    +關注

    關注

    4

    文章

    244

    瀏覽量

    27062

原文標題:幾種延時處理方法

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    【技術案例】Qt 環境部署 - Ubuntu 篇

    什么是QtQt是一個跨平臺C++圖形用戶界面應用程序開發框架,可構建高性能的桌面、移動及Web應用程序,也可用于開發非GUI程序,比如控制臺工具和服務器。Qt是面向對象的框架,使用特殊的代碼生成
    的頭像 發表于 04-16 17:17 ?153次閱讀
    【技術案例】<b class='flag-5'>Qt</b> 環境部署 - Ubuntu 篇

    延時繼電器的工作原理和接線方法

    延時繼電器作為一在電氣系統中廣泛應用的控制元件,具有在電路中實現定時閉合或斷開控制的重要功能。通過引入延時功能,對電路系統的精確控制和管理,適應不同的應用場景和需求,提高生產效率、降低
    的頭像 發表于 02-07 16:09 ?733次閱讀

    Qt Group發布Qt AI Assistant,助力跨平臺UI開發

    重復性勞動方面邁出了重要一步。 Qt AI Assistant的核心目標是減少開發者在UI開發過程中所面臨的非編碼類重復性任務。這些任務往往繁瑣且耗時,容易讓開發者陷入低效的工作狀態。通過引入AI技術,Qt AI Assistant能夠智能地
    的頭像 發表于 02-07 13:47 ?712次閱讀

    Qt Group發布Qt Accelerate,加速數字產品開發進程

    Qt Group近日正式推出了Qt Accelerate,這是一款專為快速構建數字應用而設計的解決方案,旨在滿足工業制造、移動出行、消費類電子等多個領域的需求。 Qt Accelerate基于
    的頭像 發表于 01-13 11:19 ?401次閱讀

    ADS8588在做多通道采集時,ADS8588在處理輸入信號時有幾十微秒的延時,請問有無解決前端延時方法

    ADS8588 在做多通道采集時,采樣速率是200KSPS,由于ADS8588內部集成的前端在處理輸入的信號有幾十微秒的延時,影響了對采集信號的響應,達不到我們設計的ADC處理性能。請問有無
    發表于 12-10 07:55

    環路測試方法有哪幾種

    環路測試(Loop Testing)是一軟件測試方法,它通過在軟件內部創建循環來驗證程序的循環結構是否正確。這種方法特別適用于測試循環控制結構,如for循環、while循環、do-while循環等
    的頭像 發表于 09-12 14:35 ?1327次閱讀

    延時開關改手動開關怎么接線

    延時開關和手動開關是兩不同類型的開關,它們的工作原理和接線方式也有所不同。在某些情況下,我們可能需要將延時開關改為手動開關,以滿足特定的使用需求。 一、延時開關和手動開關的區別 工作
    的頭像 發表于 08-19 15:49 ?1212次閱讀

    延時開關怎么調時間長短

    延時開關是一常見的電子控制設備,廣泛應用于各種場合,如照明、空調、風扇等。它可以根據用戶的需求,設定一定的延時時間,實現自動控制。 一、延時開關的工作原理
    的頭像 發表于 08-19 15:46 ?3776次閱讀

    延時開關上l和a是什么意思

    延時開關是一常見的電子控制元件,廣泛應用于各種電子設備和系統中。它可以實現對電路的自動控制,使電路在一定的延時后自動接通或斷開。在延時開關的標識中,L和A通常代表不同的意義。 一、
    的頭像 發表于 08-19 15:45 ?7623次閱讀

    嵌入式QT常見開發方式有哪些?

    嵌入式QT常見開發方式有哪些? 嵌入式工程師在學習和使用Qt進行開發時,常見的幾種開發方式包括: 1.Qt Widgets編程: 通過C++代碼直接編寫GUI應用程序,利用QtWi
    發表于 08-12 10:05

    產生脈沖信號有幾種方法

    脈沖信號是一在特定時間間隔內具有特定幅度的信號,它在電子學、通信、控制等領域有著廣泛的應用。產生脈沖信號的方法有很多種,下面將介紹幾種常見的方法。 555定時器產生脈沖信號 555定
    的頭像 發表于 07-15 10:35 ?2324次閱讀
    產生脈沖信號有<b class='flag-5'>幾種方法</b>

    電路板測試方法有哪幾種

    。這些測試方法各有特點,可以根據電路板的類型和應用場景進行選擇。 一、視覺檢測 視覺檢測是利用機器視覺技術對電路板進行外觀檢查的一種方法。它可以通過高清攝像頭捕捉電路板的圖像,然后通過圖像處理算法對電路板上
    的頭像 發表于 05-28 15:49 ?3300次閱讀

    焊縫檢測方法幾種類型?

    ,焊縫激光檢測作為一高精度、高效率的技術,正在成為焊接質量控制的重要工具。 1. 視覺檢測 視覺檢測是最常見的焊縫檢測方法之一。通過相機和圖像處理軟件,對焊縫進行實時監測和分析。這種方法
    的頭像 發表于 05-08 14:09 ?996次閱讀
    焊縫檢測<b class='flag-5'>方法</b>有<b class='flag-5'>幾種</b>類型?

    接地電阻的測量有哪幾種方法

    接地電阻的測量對于確保電氣系統的安全性和可靠性至關重要。存在幾種不同的方法來測量接地電阻,每種方法都有其特定的應用場景和技術要求。
    的頭像 發表于 05-07 14:17 ?1.6w次閱讀

    NTP網絡時鐘同步服務器(授時服務器)的幾種設置方法

    NTP網絡時鐘同步服務器(授時服務器)的幾種設置方法
    的頭像 發表于 04-29 11:28 ?1.2w次閱讀
    NTP網絡時鐘同步服務器(授時服務器)的<b class='flag-5'>幾種</b>設置<b class='flag-5'>方法</b>
    主站蜘蛛池模板: 成年ssswww日本 | 69女poren16| 五月婷婷六月合 | 曰本女人一级毛片看一级毛 | 中文字幕亚洲一区婷婷 | 久久99精品久久久久久久不卡 | 日本一二线不卡在线观看 | 成人亚洲网 | 欧美性色黄在线视 | 亚洲婷婷在线视频 | 国产一区二区在线视频播放 | 99热这里只有精品一区二区三区 | 日本三级在线视频 | 欧美在线视频7777kkkk | 女同激情视频 | 婷婷毛片 | 四虎黄色片 | 性久久久久久久久久 | 迅雷www天堂在线资源 | 国产成人精品日本亚洲直接 | 国产色在线 | 亚洲 国产色综合天天综合网 | 日本在线视频二区 | 色五月情| 狠狠色狠狠色综合婷婷tag | 久久精品隔壁老王影院 | 97人人模人人揉人人捏 | 激情在线网站 | 伊人91在线 | 中文网丁香综合网 | 国产一区二区三区毛片 | 黄视频福利 | 欧美一级欧美三级 | 国产在线观看网址你懂得 | 天天狠狠弄夜夜狠狠躁·太爽了 | 亚洲国产精品嫩草影院 | 任你操免费视频 | 欧美日韩国产一区二区三区不卡 | 午夜精品在线免费观看 | 嫩草影院国产 | 中文天堂资源在线www | 国产美女作爱全过程免费视频 |