Qt、Curl 异步请求

本文介绍了如何在Qt应用中结合Curl进行异步请求,强调了CURLM模式下数据错乱的问题,建议在高频率请求时注意。同时提到可以预先进行域名解析以提高接口请求速度,并且在示例中省略了超时设置以适应特定业务需求,使用了Qt的信号槽机制来处理请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

curl异步请求相比于同步请求差别不大,配合业务使用时会复杂点;

注意点:

1、使用CURLM模式时,curl_easy_init返回的CURL会复用,一旦请求频率过高会导致返回数据错乱;

2、可在请求之前添加域名解析,加速接口的请求速度,效果非常明显;

3、本示例删除了curl_easy_setopt(curl, CURLOPT_TIMEOUT, TIME_OUT) 超时设置是为了配合业务需要,可自行添加;

4、示例使用了Qt的类型和信号槽

 

1:创建一个业务线程:轮询curl是否有可用数据

#ifndef CURL_THREAD_H
#define CURL_THREAD_H

#include <QThread>

class CurlServer;
class CurlThread : public QThread
{
	Q_OBJECT
signals :
    //str:返回回调数据的地址
	void signal_CurlThread_SendData(void* str);
public:
	CurlThread(QObject *parent);
	~CurlThread();
	void stop();
	void setToken(const std::string token);
    /*intptr_t:返回回调数据的地址,在业务侧保存该数据对应的请求类型
    * 用来匹配接口返回的数据类型
    */
	intptr_t gets (std::string& strUrl);
	intptr_t posts(std::string& strUrl, std::string& strPara);
protected:
	virtual void run();
private:
	CurlServer * m_pCurlServer = nullptr;
	bool m_bIsStop = false;
};

#endif // CURL_THREAD_H
#include "curl_thread.h"
#include "./curl_server.h"
#pragma execution_character_set("utf-8")
CurlThread::CurlThread(QObject *parent)
	: QThread(parent)
{
	m_pCurlServer = new CurlServer(this);
	//ToDo:连接信号
	connect(m_pCurlServer, &CurlServer::signal_CurlServer_SendData, this, &CurlThread::signal_CurlThread_SendData);
}

CurlThread::~CurlThread()
{
	m_bIsStop = true;
}

void CurlThread::stop()
{
	m_bIsStop = true;
}

void CurlThread::setToken(const std::string token)
{
	m_pCurlServer->setToken(token);
}

intptr_
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二丶九

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值