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

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

3天內不再提示

幾種Qt種延時處理方法

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

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

一、阻塞型延時

阻塞的原理就是:在延時期間,本線程的事件循環(huán)得不到執(zhí)行。

1、QThread類的sleep()

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

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

2、使用定時器:死等

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

二、非阻塞延時

原理無非就是利用事件循環(huán),有兩種原理:

1、處理本線程的事件循環(huán)

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

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

創(chuàng)建子事件循環(huán),在子事件循環(huán)中,父事件循環(huán)仍然是可以執(zhí)行的

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

三、耗時代碼的處理

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

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

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

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

副作用:(特別注意?。?/p>

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

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

審核編輯 :李倩


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

    關注

    0

    文章

    107

    瀏覽量

    25535
  • 函數(shù)
    +關注

    關注

    3

    文章

    4331

    瀏覽量

    62622
  • 嵌入式軟件
    +關注

    關注

    4

    文章

    240

    瀏覽量

    26648

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

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

收藏 人收藏

    評論

    相關推薦

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

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

    環(huán)路測試方法有哪幾種

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

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

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

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

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

    嵌入式QT常見開發(fā)方式有哪些?

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

    降噪是什么原理 降噪方法分為哪幾種

    降噪是什么原理 降噪方法分為哪幾種? 降噪是指通過一系列技術手段減少或消除環(huán)境中存在的噪聲干擾,從而提高音頻、圖像、信號等的質量或清晰度。降噪的原理主要涉及信號處理、數(shù)字濾波、統(tǒng)計學等方面的知識
    的頭像 發(fā)表于 03-14 16:55 ?7516次閱讀

    Qt上位機開發(fā)實戰(zhàn)案例

    Qt Creator是一個用于Qt開發(fā)的輕量級跨平臺集成開發(fā)環(huán)境。 Qt Creator可帶來兩大關鍵益處: 提供首個專為支持跨平臺開發(fā)而設計的集成開發(fā)環(huán)境 (IDE),并確保首次接觸
    的頭像 發(fā)表于 03-13 12:31 ?2542次閱讀
    <b class='flag-5'>Qt</b>上位機開發(fā)實戰(zhàn)案例

    3562-Qt工程編譯說明

    本文檔主要說明如何將已有 Qt 工程進行編譯,生成可在評估板上正常運行的 ARM 端 Qt 程序鏡像。 Qt 開發(fā)環(huán)境主要包括 Qt Creator 工具、X86 端
    的頭像 發(fā)表于 03-05 09:19 ?479次閱讀
    3562-<b class='flag-5'>Qt</b>工程編譯說明

    熔斷器有幾種形式 熔斷器的滅弧方法有哪幾種

    熔斷器有幾種形式 熔斷器的滅弧方法有哪幾種? 熔斷器是一用來保護電路免受過電流和過負荷的損壞的電器設備。它們在電力系統(tǒng)和電子設備中廣泛應用,也被稱為電氣保險絲。熔斷器有多種形式,滅弧
    的頭像 發(fā)表于 02-06 10:08 ?2433次閱讀

    電阻應變片的溫度補償方法幾種?

    電阻應變片的溫度補償方法幾種? 電阻應變片的溫度補償方法有以下幾種: 1. 溫度傳感器補償方法 溫度傳感器補償
    的頭像 發(fā)表于 02-04 18:14 ?5625次閱讀

    時間繼電器通電延時與斷電延時的區(qū)別

    時間繼電器通電延時與斷電延時的區(qū)別? 時間繼電器是一常用的控制設備,可用于各種延時應用。常見的時間繼電器主要包括通電延時繼電器和斷電
    的頭像 發(fā)表于 02-04 13:43 ?4689次閱讀

    pcb表面處理幾種工藝介紹

    PCB表面處理是指在印刷電路板(PCB)制造過程中,對PCB表面進行處理以改善其性能和外觀。常見的PCB表面處理方法有以下幾種: 熱風整平
    的頭像 發(fā)表于 01-16 17:57 ?1735次閱讀
    pcb表面<b class='flag-5'>處理</b>的<b class='flag-5'>幾種</b>工藝介紹

    QT串口通信的簡單使用

    QT串口通信是上位機和下位機通信常用的通信方式, 也是學習QT必須學會的基礎知識, 這篇就簡單介紹一下QT串口通信的簡單使用.
    的頭像 發(fā)表于 01-15 09:27 ?2023次閱讀
    <b class='flag-5'>QT</b>串口通信的簡單使用

    PWM產生的幾種方法總結

    PWM產生的方法有很多種,小編將常用的幾種產生方法作了一個整理以及分類,下面我們來了解一下。
    的頭像 發(fā)表于 01-11 09:15 ?3000次閱讀
    PWM產生的<b class='flag-5'>幾種方法</b>總結

    介紹幾種常見的延時電路及其工作原理

    延時電路是電子設備中常用的一電路,它可以使輸出信號在一定時間內延遲輸入信號。延時電路的種類有很多
    的頭像 發(fā)表于 12-31 14:33 ?2.2w次閱讀
    介紹<b class='flag-5'>幾種</b>常見的<b class='flag-5'>延時</b>電路及其工作原理