色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    107

    瀏覽量

    25574
  • 函數
    +關注

    關注

    3

    文章

    4345

    瀏覽量

    62950
  • 嵌入式軟件
    +關注

    關注

    4

    文章

    240

    瀏覽量

    26718

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

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

收藏 人收藏

    評論

    相關推薦

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

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

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

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

    環路測試方法有哪幾種

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

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

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

    延時開關怎么調時間長短

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

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

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

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

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

    產生脈沖信號有幾種方法

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

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

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

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

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

    Qt上位機開發實戰案例

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

    3562-Qt工程編譯說明

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

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

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

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

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

    時間繼電器通電延時與斷電延時的區別

    時間繼電器通電延時與斷電延時的區別? 時間繼電器是一常用的控制設備,可用于各種延時應用。常見的時間繼電器主要包括通電延時繼電器和斷電
    的頭像 發表于 02-04 13:43 ?5081次閱讀
    主站蜘蛛池模板: 亚洲福利精品电影在线观看 | 人体内射精一区二区三区 | 99re在这里只有精品 | 午夜福利体验免费体验区 | 国产欧美另类久久久精品免费 | 日日噜噜噜噜夜夜爽亚洲精品 | 蜜芽资源高清在线观看 | 火影小南被爆羞羞网站 | 欧美一级情欲片在线 | 欧美成人中文字幕在线视频 | 苍老师刺激的120分钟 | 亚洲 无码 制服 日韩 | 亚洲精品蜜桃AV久久久 | 精品国产麻豆免费人成网站 | 成人精品视频在线观看播放 | 久久兔费黄A级毛片高清 | 国产成人女人视频在线观看 | 棉签和冰块怎么弄出牛奶视频 | 姑娘日本大全免费观看版中文翻译 | oldgrand欧洲老妇人 | 亚洲福利网站 | 伊人久久网国产伊人 | 漂亮的保姆6在线观看中文 漂亮的保姆5电影免费观看完整版中文 | 性色AV乱码一区二区三区视频 | 野花日本大全免费高清完整版 | 女人张开腿让男人桶爽免 | 色99蜜臀AV无码 | 校园全肉高h湿一女多男 | 绑着男军人的扒开内裤 | 国产精品-区区久久久狼 | 国产成人无码精品久久久影院 | 精品亚洲一区二区在线播放 | 久久re视频精品538在线 | 久久99re6国产在线播放 | 亚洲大片免费看 | 97免费视频观看 | 国产普通话精品久久 | 国产精品人妻99一区二 | 久久久久久久久久综合情日本 | 荡公乱妇HD中文字幕 | 三级成年网站在线观看 |