Essential Qt 第二十六章 多线程

      多线程是一个很大的范围,内容也非常的多,我手上就有三本总计超过1500页的书讲述多线程的问题,这一章只能演示下Qt对多线程提供的一些支持。多线程有很强的平台相关性,很多时候需要用到各平台的API,这对于移植提出了挑战,而Qt提供的线程相关的类可以在各个平台上使用,对于很多开发者来说,这可以节约很多时间和精力。

      本章只讨论Qt的线程的一些类及用法,这里假设你已经对线程有一定的了解,类似线程,互斥锁,互斥量,死锁,线程安全,原子操作等一些术语假设你已经了解他们的含义,这里不多做介绍了。

       在第二十一章里有个显示本地目录的演示程序,这个程序遇到一个问题,由于需要加载的目录数量过多,程序启动需要花费大量时间,为了在在Linux下运行,甚至取消了有大量文件的两个目录,当然对于一个用于演示的程序来说,这到没有什么太大关系,但这里的真正问题在于:当程序直线某个比较费时的操作时,界面就会卡死。

      


      这里有个很简单的演示程序,这个程序有个选择本地目录的功能,当用户选择了某个目录的话,这个程序就可以显示该目录下所有图片的缩略图,但假如一个目录下的图片比较多,单幅图片比较大时,界面就会处于卡死状态,卡死的时间取决于加载图片的速度,我现在的电脑加载某个目录下大约150图片,总计需要30秒的时间,也就是说在这段时间内,这个程序处于卡死状态,用户无法对程序做任何操作。要解决这个问题,就需要用到多线程,把比较耗时的加载图片的操作放置一个单独的子线程里,这样程序界面就始终处于响应操作,用户不用等待全部图片加载完后才能继续操作。

先看下这个程序的头文件

#include <QDialog>
#include <QPushButton>
#include <QLineEdit>
#include "ReadPix.h"

class PreviewPix : public QDialog
{
    Q_OBJECT
private:
    QString currentDir_String;

    QPushButton* chooseDir_PushButton;
    QPushButton* pageUp_PushButton;
    QPushButton* pageDown_PushButton;

    QList<QPushButton*> previewPix_List;
    QList<QPixmap> pix_List;

    QLineEdit* currentDir_LineEdit;

    ReadPix* readPix_Thread;
public:
    PreviewPix(QWid
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值