QThread类参考

来源:互联网 发布:网络投资挣钱 编辑:程序博客网 时间:2024/05/21 04:21

先给出转载网址:Qthread

同时增加了一些自己的理解

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

#include <qthread.h>

继承了Qt。

所有成员函数的列表。

公有成员

QThread ()virtual ~QThread ()bool wait ( unsigned long time = ULONG_MAX )void start ()bool finished () constbool running () const

静态公有成员

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

保护成员

virtual void run () = 0

静态保护成员

void sleep ( unsigned long secs )void msleep ( unsigned long msecs )void usleep ( unsigned long usecs )

详细描述

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

1)先是在头文件中实现下面这个功能#include <qthread.h>class MyThread : public QThread {    public:        virtual void run();    };(2)这个函数的实现部分添加到MyThread的源文件中    void MyThread::run()    {        for( int count = 0; count < 20; count++ ) {            sleep( 1 );            qDebug( "Ping!" );        }    }(3)下面这段代码是在另一个源文件main.cpp中实现的    int main()    {        MyThread a;        MyThread b;        a.start();//之后就进入到run中,运行其中的代码,运行结束后,跳出        b.start();        a.wait();        b.wait();    }

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

成员函数文档

void QThread::run () [纯虚 保护]这个方法是纯虚的,并且为了能够做有用的工作必须在继承类中被重新实现。这个方法的返回将会结束线程的执行。也可以参考wait()。
bool QThread::wait ( unsigned long time = ULONG_MAX )这将提供和POSIX pthread_join相似的功能。一个线程调用了它将会一直阻塞,知道下述条件之一满足时继续:这个QThread对象所关联的线程已经结束执行(比如,当它从run()中返回)。如果线程完成,这个函数将返回真。如果线程还没有开始呢,这个函数也返回真。time毫秒过去了。如果time是ULONG_MAX(默认值),然后等待将永远不会超时(线程必须从run()中返回)。如果等待时间到了,这个函数将返回假。

举例:

void MyThread::run()    {        unsigned char start[]={0xFB,0x0F,0x02,0x01,0x02,0x00,0x00,0xF1};        unsigned char get[]={0xFB,0x0F,0x09,0x04,0x09,0x00,0x00,0xE0};        Send(start);//可以直接调用同一个源文件中的其他实现函数        for(int i=0;i<3;i++)        {            unsigned char a=Recv();            if(a==0xE1)                break;        }        sleep( 1 );        for( int count = 0; count < 115; count++ )        {            unsigned char b=Recv();            switch(b)            {                case 0x02   :                    Send(get);                    Recv();                    break;                case 0x01   :                    Send(get);                    Recv();                    break;                case 0x03   :                    end(get);                    Recv();                    break;                case 0x04   :                    Send(get);                    Recv();                    break;            }        }    }
原创粉丝点击