多线程
定义:
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()一次只被一个线程调用