国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

幾種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會在延時的時間段內(nèi)失去響應(yīng),界面卡死,所以,這三個函數(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)

在等待中,不斷強制進(jìn)入當(dāng)前線程的事件循環(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)被退出
}

三、耗時代碼的處理

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

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

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

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

副作用:(特別注意!)

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

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

審核編輯 :李倩


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

    關(guān)注

    0

    文章

    110

    瀏覽量

    26356
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4417

    瀏覽量

    67516
  • 嵌入式軟件
    +關(guān)注

    關(guān)注

    4

    文章

    250

    瀏覽量

    28058

原文標(biāo)題:幾種延時處理方法

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    知識分享|連接器焊接方法幾種

    連接器是一用于連接電路的元件,通常由金屬制成。下面跟小欣一起看看連接器的焊接方法有哪幾種呢?烙鐵焊接法是最常見的連接器焊接方法之一。使用烙鐵將連接器和電路板焊接在一起,這種
    的頭像 發(fā)表于 01-20 17:57 ?1171次閱讀
    知識分享|連接器焊接<b class='flag-5'>方法</b>有<b class='flag-5'>幾種</b>?

    交流延時電源

    交流延時電源
    的頭像 發(fā)表于 12-25 12:57 ?341次閱讀
    交流<b class='flag-5'>延時</b>電源

    不同地線處理方法

    10MHz的電路,采用多點接地除了正確進(jìn)行接地設(shè)計、安裝,還要正確進(jìn)行各種不同信號的接地處理。控制系統(tǒng)中,大致有以下幾種地線: (1)數(shù)字地:也叫邏輯地,是各種開關(guān)量(數(shù)字量)信號的零電位。 (2)模擬
    發(fā)表于 12-03 07:38

    tiny4412 Qt環(huán)境搭建

    1.硬件環(huán)境 PC端:ubuntu18.04 開發(fā)板硬件平臺:tiny4412 內(nèi)核版本:linux3.5 交叉編譯器:arm-linux-gcc Qt版本:Qt5.6 2.搭建 ubuntu 下
    的頭像 發(fā)表于 10-21 09:54 ?651次閱讀
    tiny4412 <b class='flag-5'>Qt</b>環(huán)境搭建

    RK3506開發(fā)板QT Creator開發(fā)手冊,交叉編譯工具鏈與QT應(yīng)用示例,入門必備

    本文基于觸覺智能RK3506核心板/開發(fā)板介紹QTCreator交叉編譯配置與QT應(yīng)用示例。如需購買開發(fā)板進(jìn)行評估驗證簡介QTCreatorQtCreator?是由TheQtCompany開發(fā)的跨平臺集成開發(fā)環(huán)境(IDE),專為Qt框架設(shè)計,支持C++、QML、Pyth
    的頭像 發(fā)表于 09-30 16:26 ?3684次閱讀
    RK3506開發(fā)板<b class='flag-5'>QT</b> Creator開發(fā)手冊,交叉編譯工具鏈與<b class='flag-5'>QT</b>應(yīng)用示例,入門必備

    創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—Qt工程編譯、GPU核心使用說明

    本文圍繞創(chuàng)龍科技研發(fā)的評估板,詳細(xì)說明 Qt 工程編譯與 GPU 核心使用方法。涵蓋基于命令行和 Qt Creator 工具的 Qt 工程編譯流程,包括交叉編譯工具鏈、
    的頭像 發(fā)表于 09-29 14:16 ?724次閱讀
    創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—<b class='flag-5'>Qt</b>工程編譯、GPU核心使用說明

    LVGL近期很多人問,那它和Qt哪個好?

    最近拜訪做工業(yè)控制、智能家居的客戶時,常被問到同一個問題:嵌入式產(chǎn)品,GUI選LVGL還是Qt? 其實工具選擇沒有絕對的“好”與“壞”,但選對適配場景的GUI圖形用戶界面工具,能直接讓產(chǎn)品開發(fā)效率
    的頭像 發(fā)表于 09-23 15:54 ?1463次閱讀
    LVGL近期很多人問,那它和<b class='flag-5'>Qt</b>哪個好?

    探頭的延時介紹

    探頭的延時是指信號從被測點傳輸?shù)绞静ㄆ鬏斎攵说臅r間間隔,即信號經(jīng)過探頭的探針、傳輸電纜、內(nèi)部電路等路徑后,到達(dá)示波器采樣系統(tǒng)的總時間延遲,(以下討論低速信號情景,忽略示波器通道間ps級的延時誤差)。不同型號的探頭延時存在差異,尤
    的頭像 發(fā)表于 09-17 17:32 ?856次閱讀
    探頭的<b class='flag-5'>延時</b>介紹

    【干貨分享】基于QT和ffmpeg硬解碼的多路攝像頭取流

    前言其實官方為我們已經(jīng)提供了三個官方實例,我打開學(xué)習(xí)了一下,QT實例雖然也用到了信號槽,是點擊按鈕的信號槽,我覺的QT妙就妙在了信號槽和多線程,而且官方的是QT5;多路攝像頭取流案例使
    的頭像 發(fā)表于 07-29 08:05 ?1159次閱讀
    【干貨分享】基于<b class='flag-5'>QT</b>和ffmpeg硬解碼的多路攝像頭取流

    Linux修改uboot啟動延時方法詳細(xì)攻略,觸覺智能RK3568開發(fā)板演示

    本文介紹Linux系統(tǒng)修改uboot啟動延時方法,使用觸覺智能EVB3568鴻蒙開發(fā)板演示,搭載瑞芯微RK3568,四核A55處理器,主頻2.0Ghz,1T算力NPU;支持開源鴻蒙
    的頭像 發(fā)表于 06-06 18:07 ?943次閱讀
    Linux修改uboot啟動<b class='flag-5'>延時方法</b>詳細(xì)攻略,觸覺智能RK3568開發(fā)板演示

    技術(shù)分享 | 如何在2k0300(LoongArch架構(gòu))處理器上跑通qt開發(fā)流程

    技術(shù)分享 | 如何在2k0300開發(fā)板(LoongArch架構(gòu))處理器上跑通qt開發(fā)流程
    的頭像 發(fā)表于 05-20 11:05 ?898次閱讀
    技術(shù)分享 | 如何在2k0300(LoongArch架構(gòu))<b class='flag-5'>處理</b>器上跑通<b class='flag-5'>qt</b>開發(fā)流程

    如何在2K0300開發(fā)板上搭建Qt環(huán)境

    近期迅為售后團隊反饋,許多用戶咨詢:2K0300處理器采用了LA264處理器核,若要在該處理器上運行Qt程序,由于架構(gòu)發(fā)生了變化,其使用方法
    的頭像 發(fā)表于 05-16 14:27 ?678次閱讀
    如何在2K0300開發(fā)板上搭建<b class='flag-5'>Qt</b>環(huán)境

    基于RK3576開發(fā)板的QT GUI例程

    EASYEAI Orin-Nano開發(fā)板搭載了帶有xfce桌面環(huán)境的Debian系統(tǒng),支持Qt應(yīng)用程序的開發(fā)和運行。開發(fā)板采用RK3576 CPU,性能強大,可直接在板上編譯Qt應(yīng)用程序,確保最佳
    的頭像 發(fā)表于 05-14 10:26 ?1492次閱讀
    基于RK3576開發(fā)板的<b class='flag-5'>QT</b> GUI例程

    EtherCAT運動控制器實時數(shù)據(jù)的Qt示波器

    基于QT開發(fā)調(diào)用正運動函數(shù)接口實現(xiàn)控制器數(shù)據(jù)實時監(jiān)測的示波器效果
    的頭像 發(fā)表于 04-17 17:12 ?865次閱讀
    EtherCAT運動控制器實時數(shù)據(jù)的<b class='flag-5'>Qt</b>示波器

    【技術(shù)案例】Qt 環(huán)境部署 - Ubuntu 篇

    什么是QtQt是一個跨平臺C++圖形用戶界面應(yīng)用程序開發(fā)框架,可構(gòu)建高性能的桌面、移動及Web應(yīng)用程序,也可用于開發(fā)非GUI程序,比如控制臺工具和服務(wù)器。Qt是面向?qū)ο蟮目蚣埽褂锰厥獾拇a生成
    的頭像 發(fā)表于 04-16 17:17 ?1935次閱讀
    【技術(shù)案例】<b class='flag-5'>Qt</b> 環(huán)境部署 - Ubuntu 篇