**
更新时间:2020-07-21
**
多线程之间的数据通信:
参考:
Qt多线程通信
QT 信号槽connect写法
Qt 多线程同步与通信
槽函数绑定推荐第二种写法:QT5后推出的写法
connect(对象, &类名::信号, 对象, &类名::函数名,Qt::QueuedConnection);
connect(aa_obj, &AA::signalabc, bb_obj, &BB::func,Qt::QueuedConnection);
线程之间数据通信一共有两种:
一种是大多数语言的共享变量,即全局变量的做法。
一种是QT自带信号槽绑定。
参考:
多线程:
1.多线程1
2.QThreadPool的解释及使用
因为最近使用到了线程池处理:
下面给一个使用QT线程池的例子:
pro文件:添加模块
QT += concurrent
所需头文件:
#include < QThreadPool>
#include < QRunnable>
#include < QtConcurrent>
#include < QFuture>
//定义线程池和设置线程池的数量
//打印线程池的上限--我的是为8
qDebug()<<QThread::idealThreadCount();
QThreadPool pool;
pool.setMaxThreadCount(3);
//设置完线程池后就能使用了
//lambda写法:
//无返回值:
QtConcurrent::run([=]()
{
qDebug()<<"你的数据处理";
});
//有返回值:
QFuture<void> f = QtConcurrent::run([=]()
{
qDebug()<<"你的数据处理";
});
//调用函数传参--常用
//线程池名-对象-函数名-参数类型+参数
QtConcurrent::run(&pool, this, &类名::函数名,QString(参数));
QFuture<void> f = QtConcurrent::run(&pool, this, &类名::函数名,QString(参数));
就这样,成功使用线程池。
当你的线程池中的线程没有空余,不会触发新的线程。(可作为某种超时处理)
工作繁忙,有空闲时间就继续更新。
对QT的线程使用也不是非常熟练。
后面再抽空完善。
~持续更新