![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Qt线程
文章平均质量分 69
友善啊,朋友
这个作者很懒,什么都没留下…
展开
-
使用Qt线程 + FFmpeg获取视频流并显示图像到窗口
#ifndef FFMPEG_GET_IMAGE_RUNNABLE_H#define FFMPEG_GET_IMAGE_RUNNABLE_H#include <QObject>#include <QString>#include <QPixmap>#include <QMutex>class ffmpeg_get_image_worker : public QObject{ Q_OBJECTpublic: ffmpeg_g.原创 2022-03-23 15:43:25 · 4693 阅读 · 2 评论 -
QFutureSynchronizer
一、描述QFutureSynchronizer 是一个模板类,它简化了一个或多个 QFuture 对象的同步。例: void someFunction() { QFutureSynchronizer<void> synchronizer; synchronizer.addFuture(QtConcurrent::run(anotherFunction)); synchronizer.addFuture(QtConcurrent::map(list,原创 2021-07-11 23:24:13 · 622 阅读 · 0 评论 -
QFutureWatcher:异步运行监视者
一、描述QFutureWatcher 提供有关 QFuture 的信息和通知。示例:开始运行并在完成后获取槽回调: MyClass myObject; QFutureWatcher<int> watcher; connect(&watcher, &QFutureWatcher<int>::finished, &myObject, &MyClass::handleFinished); QFuture<int> futur原创 2021-07-11 22:47:45 · 4335 阅读 · 0 评论 -
Qt线程:QSemaphore 和 QSemaphoreReleaser
QSemaphore一、描述信号量通常用于保护一定数量的相同资源。信号量支持两种基本操作:获取资源和释放资源。二、成员函数1、~QSemaphore()警告:销毁正在使用的信号量可能会导致未定义的行为。2、void acquire(int n = 1)尝试获取由信号量保护的 n 个资源。 如果 n > available(),此调用将阻塞,直到有足够的资源可用。3、void release(int n = 1)释放由信号量保护的 n 个资源。4、b.原创 2021-07-10 20:58:22 · 792 阅读 · 0 评论 -
Qt线程:QWaitCondition
一、描述QWaitCondition 线程等待条件。作用是允许一个线程告诉其他线程某种条件已经满足。二、成员函数1、void notify_all()提供此功能是为了兼容 STL。相当于wakeAll()。2、void notify_one()提供此功能是为了兼容 STL。相当于wakeOne()。3、void wakeAll()唤醒所有在等待条件的线程。线程被唤醒的顺序取决于操作系统的调度策略,无法控制或预测。4、void wakeOne()唤醒一个.原创 2021-07-10 20:04:02 · 1731 阅读 · 0 评论 -
Qt线程:QReadLocker 和 QWriteLocker
QReadLocker 和 QWriteLocker 的目的是简化 QReadWriteLock 的锁定和解锁。锁定和解锁语句或异常处理代码中容易出错且难以调试。 在这种情况下可以使用 QReadLocker 和 QWriteLocker 来确保读写锁的状态始终是明确定义的。QReadLocker下面是一个使用 QReadLocker 锁定和解锁读写锁进行读取的示例: QReadWriteLock lock; QByteArray readData() { QReadLocke原创 2021-07-10 15:42:59 · 1238 阅读 · 0 评论 -
Qt线程:QMutexLocker
一、描述在复杂的函数和语句或异常处理代码中锁定和解锁 QMutex 容易出错且难以调试。 在这种情况下可以使用 QMutexLocker 来确保互斥锁的状态始终是明确定义的。QMutexLocker 应该在需要锁定 QMutex 的函数中创建。 创建 QMutexLocker 时,QMutex 对象被锁定。可以使用 unlock() 和 relock() 解锁和重新锁定互斥锁。 如果锁定,则QMutex 对象会在 QMutexLocker 销毁时解锁。例如,这个复杂的函数在进入函数时锁定 QMut原创 2021-07-10 15:22:35 · 1054 阅读 · 0 评论 -
Qt线程:QReadWriteLock
一、描述读写锁是一种同步工具,用于保护可以进行读写访问的资源。这种索允许多个线程同时进行只读访问,但是一旦一个线程想要写入资源,则必须阻止所有其他线程,直到写入完成。例: QReadWriteLock lock; void ReaderThread::run() { ... lock.lockForRead(); read_file(); lock.unlock(); ... } void WriterThread::run()原创 2021-07-10 15:08:23 · 1230 阅读 · 0 评论 -
Qt线程:QMutex 和 QRecursiveMutex
一、描述QMutex是互斥量,用于给对象、数据结构、代码段加上索使它们成为互斥体,从而一次只有一个线程可以访问这些内容。例如,假设有一个方法在两行上向用户打印一条消息: int number = 6; void method1() { number *= 5; number /= 4; } void method2() { number *= 3; number /= 2; }如果连续调用这两个方法,会发生以下情况: // me原创 2021-07-10 14:14:45 · 3108 阅读 · 3 评论 -
Qt线程:线程池——QThreadPool 和 QRunnable
QThreadPool一、描述QThreadPool 类管理 QThread 的集合。QThreadPool 管理和回收单独的 QThread 对象,以减少使用线程的程序中的线程创建成本。每个 Qt 应用程序都有一个全局 QThreadPool 对象,可以通过调用 globalInstance() 来访问它。要使用 QThreadPool,需要子类化 QRunnable 并实现 run() 虚函数。然后创建该类的对象并将其传递给 QThreadPool::start()。QThreadP原创 2021-07-10 00:35:06 · 5147 阅读 · 0 评论 -
Qt线程:QThread
一、描述一个QThread对象管理程序内的一个线程,QThreads在run()中开始执行。默认情况下,run()通过调用exec()启动事件循环,并在线程内部运行一个Qt事件循环。可以通过使用 QObject::moveToThread() 将对象移动到线程来使用它们。 class Worker : public QObject { Q_OBJECT public slots: void doWork(const QString ¶meter)原创 2021-07-09 12:55:14 · 5347 阅读 · 0 评论 -
【翻译】Qt线程概述
一、关于线程线程的用途:单个进程内的并发。1.1、单核CPU在单核 CPU 上并行工作是一种错觉。对于进程,这种错觉是通过在很短的时间后中断处理器对一个进程的工作而产生的。然后处理器继续下一个过程。为了在进程之间切换,保存当前程序计数器并加载下一个处理器的程序计数器;对寄存器和某些体系结构和操作系统特定数据进行处理。正如一个 CPU 可以驱动两个或多个进程一样,也可以让 CPU 在一个进程的两个不同代码段上运行。当一个进程启动时,它总是执行一个代码段,该进程被称为主线程。程序可能会决定启动第原创 2021-07-07 13:37:17 · 1529 阅读 · 0 评论 -
一个线程更新GUI的例子:moveToThread方式
添加一个进度条,在子线程里过一段时间发个信号给主线程更新进度条。#include "threaad.h"threaad::threaad(QObject *parent) :QObject(parent){}void threaad::doWork(){ for(int i = 0; i < 1000000;++i) { if(i % 100000 == 0) { emit sendNum(i);.原创 2020-11-15 16:36:18 · 429 阅读 · 0 评论 -
一个线程更新GUI的例子:QThread实例化方式
添加一个进度条,在子线程里过一段时间发个信号给主线程更新进度条。#include "threaad.h"threaad::threaad(QObject *parent) :QThread(parent){}void threaad::run(){ for(int i = 0; i < 1000000;++i) { if(i % 100000 == 0) { emit sendNum(i); .原创 2020-11-15 16:04:33 · 403 阅读 · 0 评论 -
Qt线程:线程池QThreadPool用法示例
1.先定义一个要在线程池里处理的任务 1)继承QRunnable 2)重写run();#ifndef WORKER_H#define WORKER_H#include <QRunnable>class worker : public QRunnable{public: worker();private: void run();};#endif // WORKER_H#include "worker.h"#include <QD..原创 2020-06-15 13:38:44 · 3399 阅读 · 0 评论