QT异步获取数据方法

QT异步获取数据方法

1.信号槽

这个是最常用的,搭配多线程使用。主线程只需要写好槽函数并connect后,等待信号的来到就行了。
一些信号的参数类型如果是自定义类型需要在主线程构造函数上注册一下。
其中,多线程的方法有:继承QThread,重写run函数;继承QObject,使用moveToThread函数;
工作函数继承QRunnable,使用线程池。

2.QtConcurrent

也是多线程的一种方式,使用QtConcurrent的函数。

run函数在线程中调用自定义的函数,后面可以跟函数的参数(可选)
QFuture < QString > f1=QtConcurrent::run(&hello,123);

其中,hello是任意线程的函数名,可以直接在当前线程中单独开辟一个线程为这个函数服务。后面的是函数参数,前面是返回的函数结果。(QString可以变)。

3.QEventLoop

事件循环,这个应该算是一种伪异步,因为虽然他只能让这段代码的前部分的代码工作,阻塞后面的代码。
举个信号槽的例子。它会把线程阻塞在当前,然后在这个前面的信号槽连接可以使用,当获取信号时立马执行槽函数;但是后面的连接就不能使用,即便获取到了信号也不会立马运行槽函数,而是这个事件循环结束后再运行。

QEventLoop loop;
QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec();

也可以监听线程结束的信号。

 QEventLoop loop;
 MyThread thread;
 QObject::connect(&thread, &MyThread::threadFinished, &loop, &QEventLoop::quit);
 thread.start();
 loop.exec();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值