欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt之簡(jiǎn)單的異步操作實(shí)現(xiàn)方法

 更新時(shí)間:2022年11月10日 15:20:05   作者:超級(jí)小清  
這篇文章主要介紹了Qt之簡(jiǎn)單的異步操作實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Qt簡(jiǎn)單的異步操作

在實(shí)際應(yīng)用中,經(jīng)常會(huì)遇到一些耗時(shí)操作,導(dǎo)致了主線程的阻塞,這時(shí)候可以使用異步操作來避免阻塞。

Qt的異步操作需要使用下面的庫

#include <QtConcurrent/QtConcurrent>

然后將耗時(shí)操作丟進(jìn)下面的函數(shù)中即可。

QtConcurrent::run([=]()
? ? {
? ? ? ? func();
? ? });

如果需要判斷耗時(shí)操作執(zhí)行完畢與否,可以使用QFuture和QFutureWatcher的結(jié)合。QFuture 表示異步計(jì)算的結(jié)果,QFutureWatcher 則允許使用信號(hào)和槽監(jiān)視 QFuture。

代碼如下。

?? ?QFutureWatcher<void> *pwatcher = nullptr;
?? ?pwatcher = new QFutureWatcher<void>;

? ? //把掃描到的wifi信息輸出到指定文件
? ? QFuture<void> future = QtConcurrent::run([=]()
? ? {
? ? ? ? func(); //耗時(shí)操作
? ? });

? ? connect(pwatcher, &QFutureWatcher<void>::finished, this, [=]()
? ? {
? ? ? ? core(); //主線程操作
? ? });

? ? pwatcher->setFuture(future);

QtConccurent管理的線程實(shí)際是從線程池分配線程資源的,而綁定QFutureWatcher的槽是在主線程中執(zhí)行的。

在需要單次執(zhí)行且內(nèi)部邏輯較簡(jiǎn)單的時(shí)候使用QtConccurrent + QFuture + QFutureWatcher是很方便的,可以減少很多編碼工作量,而且在多cpu環(huán)境中,QtConccurent也會(huì)啟用多核。

Qt異步變同步問題

解決的問題

很多情況會(huì)出現(xiàn)多線程程序,再進(jìn)行操作時(shí)候,其中一個(gè)線程的邏輯執(zhí)行需要另外一個(gè)線程的一個(gè)信號(hào),那么異步變同步就變得無比重要

如何實(shí)現(xiàn)

使用:QEventLoop類

The QEventLoop class provides a means of entering and leaving an event loop.

QEventLoop類提供了一種進(jìn)入和離開事件循環(huán)的方法。  

At any time, you can create a QEventLoop object and call exec() on it to start a local event loop. From within the event loop, calling exit() will force exec() to return.

在任何時(shí)候,您都可以創(chuàng)建一個(gè)QEventLoop對(duì)象并在其上調(diào)用exec()來啟動(dòng)一個(gè)本地事件循環(huán)。 在事件循環(huán)中,調(diào)用exit()將強(qiáng)制返回exec()。  

代碼塊解析

? ? QEventLoop q;
? ? QTimer t;
? ? t.setSingleShot(false);
? ? connect(&t, &QTimer::timeout, this, [=](){
?? ??? ?//TODO SOMETHING
? ? });
?? ?connect(this, SIGNAL(connectStatusChangedSig()), &q, SLOT(quit())); ?//異步調(diào)用完成退出
? ? t.start(50);
? ? q.exec();

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++的原生數(shù)組你了解多少

    C++的原生數(shù)組你了解多少

    這篇文章主要為大家詳細(xì)介紹了C++的原生數(shù)組,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C/C++?Qt?StatusBar底部狀態(tài)欄應(yīng)用教程

    C/C++?Qt?StatusBar底部狀態(tài)欄應(yīng)用教程

    Qt窗體中默認(rèn)會(huì)附加一個(gè)QstatusBar組件,狀態(tài)欄組件位于主窗體的最下方,其作用是提供一個(gè)工具提示功能。本文主要介紹了StatusBar底部狀態(tài)欄的應(yīng)用教程,需要的同學(xué)可以學(xué)習(xí)一下
    2021-12-12
  • c語言解析bmp圖片的實(shí)例

    c語言解析bmp圖片的實(shí)例

    下面小編就為大家?guī)硪黄猚語言解析bmp圖片的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • C語言?柔性數(shù)組的使用詳解

    C語言?柔性數(shù)組的使用詳解

    柔性數(shù)組(Flexible?Array)是引入的一個(gè)新特性,它允許你在定義結(jié)構(gòu)體時(shí)創(chuàng)建一個(gè)空數(shù)組,而這個(gè)數(shù)組的大小可以在程序運(yùn)行的過程中根據(jù)你的需求進(jìn)行更改特別注意的一點(diǎn)是:這個(gè)空數(shù)組必須聲明為結(jié)構(gòu)體的最后一個(gè)成員,并且還要求這樣的結(jié)構(gòu)體至少包含一個(gè)其他類型的成員
    2022-03-03
  • C語言數(shù)字圖像處理之直方圖均衡化

    C語言數(shù)字圖像處理之直方圖均衡化

    這篇文章主要為大家詳細(xì)介紹了C語言數(shù)字圖像處理之直方圖均衡化,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++ 編寫DLL文件給易語言調(diào)用方法

    C++ 編寫DLL文件給易語言調(diào)用方法

    在本文中我們給大家分享了C++ 編寫DLL文件給易語言調(diào)用的代碼和方法,需要的朋友們學(xué)習(xí)下。
    2019-01-01
  • C語言形參和實(shí)參的區(qū)別詳解

    C語言形參和實(shí)參的區(qū)別詳解

    在函數(shù)定義和調(diào)用過程中,形參和實(shí)參是非常重要的概念,本文主要介紹了C語言形參和實(shí)參的區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-05-05
  • C語言測(cè)試n的階乘和x的n次方

    C語言測(cè)試n的階乘和x的n次方

    今天小編就為大家分享一篇關(guān)于C語言測(cè)試n的階乘和x的n次方,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • C語言實(shí)現(xiàn)通訊錄功能

    C語言實(shí)現(xiàn)通訊錄功能

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)通訊錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 通過C++程序示例理解設(shè)計(jì)模式中的外觀模式

    通過C++程序示例理解設(shè)計(jì)模式中的外觀模式

    這篇文章主要介紹了通過設(shè)計(jì)模式中的外觀模式及相關(guān)的C++程序示例,外觀模式在高層提供了一個(gè)統(tǒng)一的接口實(shí)現(xiàn)一定程度上的解耦,需要的朋友可以參考下
    2016-03-03

最新評(píng)論