返回介绍

QThread类

发布于 2019-10-04 15:03:24 字数 3644 浏览 1288 评论 0 收藏 0

QThread类提供了与系统无关的线程。 详情请见……

#include <qthread.h>

继承了Qt。

所有成员函数的列表。

公有成员

  • QThread ()
  • virtual ~QThread ()
  • bool wait ( unsignedlongtime = ULONG_MAX )
  • void start ()
  • bool finished () const
  • bool running () const

静态公有成员

  • Qt::HANDLE currentThread ()
  • void postEvent ( QObject*receiver, QEvent*event )
  • void exit ()

保护成员

  • virtual void run () = 0

静态保护成员

  • void sleep ( unsignedlongsecs )
  • void msleep ( unsignedlongmsecs )
  • void usleep ( unsignedlongusecs )

详细描述

QThread类提供了与系统无关的线程。

QThread代表在程序中一个单独的线程控制,在多任务操作系统中,它和同一进程中的其它线程共享数据,但运行起来就像一个单独的程序一样。它不是在main()中开始,QThread是在run()中开始运行的。你继承run()并且在其中包含你的代码。例如:

    class MyThread : public QThread {

    public:

        virtual void run();

    };

    void MyThread::run()
    {
        for( int count = 0; count < 20; count++ ) {
            sleep( 1 );
            qDebug( "Ping!" );
        }
    }

    int main()
    {
        MyThread a;
        MyThread b;
        a.start();
        b.start();
        a.wait();
        b.wait();
    }
    

这将会开始两个线程,每个线程在屏幕上写20次“Ping!”并且退出。在main()的结尾调用wait()是必需的,因为main()的结束会终结整个程序,它会杀掉所有其它线程。当每个MyThread运行到MyThread::run()结尾时,它就结束运行,就好像一个应用程序离开main()时所做的一样。

也可以参考Qt中支持的线程、环境类和线程类。


成员函数文档

QThread::QThread ()

构造一个新的线程。这个线程将直到start()被调用的时候才开始运行。

QThread::~QThread () [虚]

QThread析构函数。

注意删除QThread对象将不会停止它所代表的线程的运行。删除一个运行中的线程(比如finished()返回假)将可能导致程序崩溃这样的结果。你可以对线程运行wait()来确定程序运行结束。

Qt::HANDLE QThread::currentThread () [静态]

这返回当前执行的线程的线程句柄。

警告:这个函数返回的句柄用于内部目的并且应该在任何应用程序代码中使用它。在Windows中,返回值是当前线程的假句柄,并且它不能用于数字比较。

void QThread::exit () [静态]

结束调用线程的执行并且唤醒任何等待它终止的线程。

bool QThread::finished () const

如果线程完成,返回真,否则返回假。

void QThread::msleep ( unsignedlongmsecs ) [静态 保护]

与系统无关的睡眠。这将导致当前线程睡眠msecs毫秒。

void QThread::postEvent ( QObject*receiver, QEvent*event ) [静态]

提供一个从一个不是事件线程的线程发送一个事件到一个对象的方法。

如下是已经完成的:

  • event被放进队列;
  • 事件线程被唤醒;
  • 事件线程发送事件到receiver对象。
重要的是请注意事件的事件处理器当它被调用时,它是被事件线程调用,而不是被调用QThread::postEvent()的线程所调用。

因为QThread::postEvent()发送事件到QApplication的事件队列,你必须在调用QThread::postEvent()之前创建QApplication对象。

事件必须在堆上分配,因为发送事件的队列会得到事件的所有权并且一旦这个事件被发送成功,它将被删除。

也可以参考QApplication::postEvent()。

void QThread::run () [纯虚 保护]

这个方法是纯虚的,并且为了能够做有用的工作必须在继承类中被重新实现。这个方法的返回将会结束线程的执行。

也可以参考wait()。

bool QThread::running () const

如果线程正在运行,返回真,否则返回假。

void QThread::sleep ( unsignedlongsecs ) [静态 保护]

与系统无关的睡眠。这将导致当前线程睡眠secs秒。

void QThread::start ()

通过调用run()(必须在QThread子类中重新实现来包含你的代码)开始这个线程的执行。如果你试图开始一个已经运行的线程,这个调用将一直等待,直到这个线程完成,然后再重新开始这个线程。

void QThread::usleep ( unsignedlongusecs ) [静态 保护]

与系统无关的睡眠。这将导致当前线程睡眠usecs微秒。

bool QThread::wait ( unsignedlongtime = ULONG_MAX )

这将提供和POSIX pthread_join相似的功能。一个线程调用了它将会一直阻塞,知道下述条件之一满足时继续:
  • 这个QThread对象所关联的线程已经结束执行(比如,当它从run()中返回)。如果线程完成,这个函数将返回真。如果线程还没有开始呢,这个函数也返回真。
  • time毫秒过去了。如果time是ULONG_MAX(默认值),然后等待将永远不会超时(线程必须从run()中返回)。如果等待时间到了,这个函数将返回假。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文