精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

幾種Qt種延時(shí)處理方法

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

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

一、阻塞型延時(shí)

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

1、QThread類的sleep()

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

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

2、使用定時(shí)器:死等

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

二、非阻塞延時(shí)

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

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

在等待中,不斷強(qiáng)制進(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;//定義一個(gè)新的事件循環(huán)
QTimer::singleShot(msec,&loop,SLOT(quit()));//創(chuàng)建單次定時(shí)器,槽函數(shù)為事件循環(huán)的退出函數(shù)
loop.exec();//事件循環(huán)開始執(zhí)行,程序會(huì)卡在這里,直到定時(shí)時(shí)間到,本循環(huán)被退出
}

三、耗時(shí)代碼的處理

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

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

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

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

副作用:(特別注意!)

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

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

審核編輯 :李倩


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

    關(guān)注

    0

    文章

    107

    瀏覽量

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

    關(guān)注

    3

    文章

    4304

    瀏覽量

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

    關(guān)注

    4

    文章

    240

    瀏覽量

    26616

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    延時(shí)開關(guān)上l和a是什么意思

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

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

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

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

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

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

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

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

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

    pcb表面處理幾種工藝介紹

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

    QT串口通信的簡(jiǎn)單使用

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

    PWM產(chǎn)生的幾種方法總結(jié)

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

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

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

    延時(shí)繼電器工作原理 斷電延時(shí)繼電器原理

    延時(shí)繼電器工作原理 斷電延時(shí)繼電器原理? 延時(shí)繼電器是一常用的電器元件,可用于各種電路控制和自動(dòng)化控制系統(tǒng)中。它在電路中的作用是在斷電之后,延時(shí)
    的頭像 發(fā)表于 12-26 15:26 ?2726次閱讀

    延時(shí)器的接線方法

    延時(shí)器是一常用的電子設(shè)備,廣泛應(yīng)用于工業(yè)控制、家電控制等領(lǐng)域。它可以提供一段預(yù)設(shè)的時(shí)間延遲,用于控制電路的開關(guān)或觸發(fā)不同的動(dòng)作。接下來將介紹延時(shí)器的接線方法。 常見的
    的頭像 發(fā)表于 12-15 11:21 ?2904次閱讀

    【干貨分享】6延時(shí)電路原理講解

    【干貨分享】6延時(shí)電路原理講解
    的頭像 發(fā)表于 12-15 09:24 ?1757次閱讀
    【干貨分享】6<b class='flag-5'>種</b><b class='flag-5'>延時(shí)</b>電路原理講解

    教你幾種電路分析的高效方法

    教你幾種電路分析的高效方法
    的頭像 發(fā)表于 12-15 09:16 ?938次閱讀
    教你<b class='flag-5'>幾種</b>電路分析的高效<b class='flag-5'>方法</b>

    延時(shí)器的接線方法有哪些

    延時(shí)器是一常用的電子元器件,用于在電路中引入延時(shí)。通過控制電流或電壓的幅度、時(shí)間或波形,延時(shí)器可以實(shí)現(xiàn)多種電路功能。在接線過程中,正確的方法
    的頭像 發(fā)表于 12-13 18:12 ?2012次閱讀

    幾種常用的產(chǎn)生負(fù)電源的方法

    幾種常用的產(chǎn)生負(fù)電源的方法
    的頭像 發(fā)表于 12-05 15:54 ?1324次閱讀
    <b class='flag-5'>幾種</b>常用的產(chǎn)生負(fù)電源的<b class='flag-5'>方法</b>