OpenCV学习 day6 多线程

 第八章

线程与进程的区别:

        进程与单个程序类似,可以由操作系统直接执行;

        线程是进程的一个子集,也就是一个进程可包含多个线程;

        通常情况下,不同的进程彼此是无关的,而不同的线程共享内存和资源(进程可以通过操作系统提供的手段实现彼此交互)

8.1 Qt中的多线程 

        Qt提供的命名空间、类和函数:

        QThread:所以线程的基类,可以从他的派生子类创建新的线程

        QThreadPool:可以用于管理线程,并且可以重用已有线程来实现新的功能

        QRunnable:提供创建线程的另一种方法,

        QMutex、QMutexLocker、QSemaphore、QWaitCondition、QReadLocker、QWriteLocker和QWriteLocker:处理线程间到的同步任务

        QtConcurrent:一个命名空间,可用于高级API创建多线程应用程序

        Qfuture、QfutureQatcher、Qfututelterator和QFutureSynchronizer:这些类与QtConcurrent命名空间共同使用,可以处理多线程以及异步操作结果

8.2 利用QThread实现低级多线程

        通过利用Qt中可用的两种不同方法来使用QThread类,首先子类化并重写run方法,然后使用所有的Qt对象中可用的moveToThread函数。

8.2.1 子类化QThread

class VideoProcessorThread : public QThread
{
    Q_OBJECT
public:
    explicit VideoProcessorThread(QObject *parent = nullptr);

signals:

    void inDisplay(QPixmap pixmap);
    void outDisplay(QPixmap pixmap);

public slots:

private:
    void run() override;

};

注意run函数只能在内部调用,因此只需重新实现它,用到以下函数:

        start:用于启动一个未启动的线程

        terminate:强制终止线程&#

你可能感兴趣的:(opencv学习,学习,opencv,计算机视觉)