最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解QT使用http通信的同步和異步

 更新時間:2023年12月21日 10:55:34   作者:Acnidouwo  
在Qt與Http通信的時候,會根據(jù)不同的情況使用同步或者異步的方式進(jìn)行數(shù)據(jù)請求,下面我們就來深入了解一下http通信的同步和異步的相關(guān)知識,感興趣的小伙伴可以了解下

在Qt與Http通信的時候,會根據(jù)不同的情況使用同步或者異步的方式進(jìn)行數(shù)據(jù)請求。

同步,即發(fā)送Http請求之后,會一直等待服務(wù)器返回的數(shù)據(jù),接收到數(shù)據(jù)之前,程序一直阻塞。

異步,即發(fā)送Http請求之后,程序可以繼續(xù)往下執(zhí)行,接收到服務(wù)器返回的數(shù)據(jù)時自動調(diào)用其對應(yīng)的槽函數(shù)處理數(shù)據(jù)。

同步需要在發(fā)送請求之后,放置一個QEnentLoop,而異步只需要綁定對應(yīng)的槽函數(shù)即可。

同步Demo:

	QUrl url(myurl);
    QNetworkReply *reply = quitmanager->get(QNetworkRequest(QUrl(url)));
    QEventLoop eventLoop;
    connect(quitmanager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
    eventLoop.exec();       //block until finish

    //reply->readall()
    reply->deleteLater();
    reply = nullptr;

    return true;

異步Demo:

    QNetworkAccessManager *manager = new QNetworkAccessManager;
    QNetworkRequest *request = new QNetworkRequest;
    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(finishedSlot(QNetworkReply*)));//綁定槽函數(shù)
    //get  post請求二選一
    QUrl url(urlHead+"exam_start/"+studentId);
    request->setUrl(url);
    manager->get(*request);//發(fā)送get請求

????QByteArray postData = document.toJson(QJsonDocument::Compact);
    request->setUrl(url);
    request->setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
    manager->post(*request, postData);//發(fā)送post請求

槽函數(shù)

void MainWindow::finishedSlot(QNetworkReply *reply)
{
    qDebug() << "進(jìn)入函數(shù): " <<  __FUNCTION__;

    QString json = reply->readAll();//這個返回的JSON包所攜帶的所有信息
    QJsonParseError jsonerror;
    QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8(), &jsonerror);

???????    if (!doc.isNull() && jsonerror.error == QJsonParseError::NoError)
    {
        QJsonObject object = doc.object();
        if(object.contains("type"))
        {
            switch (object.value("type").toInt())
            {
                case 1:parseLogJason(object);break;
                case 2:parseParameterJason(object);break;
                case 3:parseExamStartJason(object);break;
                case 4:parseExamEndJason(object);break;
                default:return;
            }
        }
    }
}

異步也可以將槽函數(shù)寫在函數(shù)內(nèi) 依然是異步

     QNetworkAccessManager* manager6 = new QNetworkAccessManager(this);
    // 準(zhǔn)備工作 - 初始化一個QNetworkRequest
    QNetworkRequest res6;
     //設(shè)置頭 - 瀏覽器
    res6.setHeader(QNetworkRequest::UserAgentHeader,
                  "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36");
    res6.setUrl(QUrl("http://" + IP + "/version"));
    QNetworkReply* reply6 = manager6->get(res6);
    reply6->attribute(QNetworkRequest::HttpStatusCodeAttribute);
    reply6->attribute(QNetworkRequest::RedirectionTargetAttribute);


    // 讀服務(wù)器回寫的數(shù)據(jù)
    connect(reply6, &QNetworkReply::readyRead, this, [=]()
    {
        //QVariant str = reply6->header(QNetworkRequest::LocationHeader);
        QByteArray data = reply6->readAll();
        //qDebug() << "version  "<< data ;
        QString str = QString(data);
        int pos = str.indexOf('-');
        version[node_id] =  str.mid(pos + 3, 2) + "."+ str.mid(0, pos ) ;
        reply6->abort();
        reply6->close();
        reply6->deleteLater();
        manager6->deleteLater();
    });

到此這篇關(guān)于詳解QT使用http通信的同步和異步的文章就介紹到這了,更多相關(guān)QT http通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MATLAB中subplot函數(shù)的語法與使用實(shí)例

    MATLAB中subplot函數(shù)的語法與使用實(shí)例

    subplot()是將多個圖畫到一個平面上的工具,下面這篇文章主要給大家介紹了關(guān)于MATLAB中subplot函數(shù)的語法與使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Linux中利用c語言刪除某個目錄下的文件

    Linux中利用c語言刪除某個目錄下的文件

    這篇文章主要給大家介紹了Linux中利用c語言刪除某個目錄下文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 深入學(xué)習(xí)C語言中memset()函數(shù)的用法

    深入學(xué)習(xí)C語言中memset()函數(shù)的用法

    這篇文章主要介紹了深入學(xué)習(xí)C語言中memset()函數(shù)的用法,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • C語言實(shí)現(xiàn)簡單回聲服務(wù)器

    C語言實(shí)現(xiàn)簡單回聲服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單回聲服務(wù)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言中類型轉(zhuǎn)換不匹配的解決方案

    C語言中類型轉(zhuǎn)換不匹配的解決方案

    本文主要介紹了C語言中類型轉(zhuǎn)換不匹配的解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-12-12
  • C/C++中二進(jìn)制文件&順序讀寫詳解及其作用介紹

    C/C++中二進(jìn)制文件&順序讀寫詳解及其作用介紹

    這篇文章主要介紹了C/C++中二進(jìn)制文件&順序讀寫詳解及其作用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C/C++的全緩沖、行緩沖和無緩沖

    C/C++的全緩沖、行緩沖和無緩沖

    這篇文章主要介紹了C/C++的全緩沖、行緩沖和無緩沖的相關(guān)知識,幫助大家更好的理解和學(xué)習(xí)c/c++,感興趣的朋友可以了解下
    2020-08-08
  • C++中this指針理解及作用

    C++中this指針理解及作用

    這篇文章主要介紹了C++中this指針理解及作用,文章通過舉例展開相關(guān)詳細(xì)內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • C++數(shù)據(jù)結(jié)構(gòu)的隊列詳解

    C++數(shù)據(jù)結(jié)構(gòu)的隊列詳解

    這篇文章主要為大家介紹了C++數(shù)據(jù)結(jié)構(gòu)的隊列,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • VC中LINK 2001 和 LINK 2009 的錯誤的解決方法

    VC中LINK 2001 和 LINK 2009 的錯誤的解決方法

    最近將兩個開源C++項(xiàng)目編譯成windows版本的時候遇到很多問題,編譯的時候總是報錯,報的最多的是無法解析的外部符號”,經(jīng)過近3天的折騰總算都通過了,這里是一些總結(jié)
    2020-10-10

最新評論

扎鲁特旗| 安义县| 冀州市| 通海县| 罗田县| 华坪县| 壤塘县| 乌鲁木齐市| 土默特左旗| 交口县| 南郑县| 天水市| 双辽市| 峨山| 鄯善县| 汽车| 全州县| 准格尔旗| 丰原市| 元阳县| 犍为县| 饶阳县| 潮安县| 泽库县| 南阳市| 广平县| 嘉鱼县| 江川县| 兴安盟| 龙岩市| 德庆县| 仁布县| 达日县| 威宁| 河间市| 伊川县| 库尔勒市| 宜春市| 绵阳市| 怀集县| 文昌市|