多线程全过程

多线程

定义:
GUI为程序主线程,子线程也称工作线程,完成一些耗时的工作任务,比如传输图片,文件
创建:
1.继承QThread,在虚函数run中添加工作任务,主线程中创建QThread线程,QThread::start()启动线程;
2.创建工作任务类QWork对象work,创建线程QThread对象thread,将对象加入到线程类中work.moveThread(thread);
3.继承QRunnable,QObject,在虚函数run中添加工作任务,主线程中QThreadPool::globalInstance()::start(任务类对象);
4.QtConcurrent::run(线程,回调函数);
特点:
1.用于简单的工作任务;
2.用于多个任务对象
3.最大限度利用线程,避免浪费,主动释放资源
销毁:
Deleter()处理完事件后删除线程
线程通信:
信号槽
线程同步:
互斥锁QMutex QMutexLocker
读写锁QReadWriter
信号量QSemaphore accquire()获取资源,detached()释放资源
条件变量QWaitCondition waitForFinished()
QFuture<> future = QtConcurrent::run(函数);
future.waitForFinished();
QThreadPool pool;
QFuture<> future = QtConcurrent::run(&pool,函数);
futrue.waiForFinished();
线程异步:
观察者模式
QFutureWatcher<> futureWatcher;
futureWatcher.setFuture(future);
1.QFuture<> future = QtConcurrent::run(函数);
2.QFuture<> future = QtConcurrent::map(list);
3.QFuture<> future = QtConcurrent::maped(list,newList);
4.QFuture<> future = QtConcurrent::mapedReduced(list,结果,结果函数);
future.result()得到结果函数mapReduceFunction()的结果,mapReduceFunction()一次只被一个线程调用

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值