江苏快3

QT多线程异步编程

技术分享 2019-12-10 18:03:30

golang 要想开个线程,直接 一个go 命令,node 异步多线程是function天生默认的

多线程异步在某些领域是非常常用的


Qt有两种多线程的方法,其中一种是继承QThread的run函数,

另外一种是把一个继承于QObject的类用moveToThread函数转移到一个Thread里。 

Qt4.8之前都是使用继承QThread的run这种方法,但是Qt4.8之后,Qt官方建议使用第二种方法。



下面记录一下moveToThread()的简单用法,防止遗忘:

1:定义一个继承于QObject的类A

2:然后用这个类的一个实例a调用moveToThread(),将QThread的一个实例thread的指针传进moveToThread()

     a。moveToThread(&thread);

3:然后启动线程,thread。start()

4:把要处理的事务放在process函数中,再利用connect,线程一启动的话就会运行process函数

     connect(&thread, &QThread::started, &a, &A::process);





江苏快3再粘贴个demo供参考:

QThread* thread = new QThread( );

 Task* task = new Task();


 // move the task object to the thread BEFORE connecting any signal/slots

 task->moveToThread(thread);


 connect(thread, SIGNAL(started()), task, SLOT(doWork()));

 connect(task, SIGNAL(workFinished()), thread, SLOT(quit()));


 // automatically delete thread and task object when work is done:

 connect(task, SIGNAL(workFinished()), task, SLOT(deleteLater()));

 connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));


 thread->start();

-------------------------------------------------------------------------------------------------

class Task : public QObject

{

Q_OBJECT

public:

    Task();

    ~Task();

public slots:

    // doWork must emit workFinished when it is done.

    void doWork();

signals:

    void workFinished();

};

北京快3 www.xieeybaa.com 贵州快3 福建快3 广西快3 极速快3 福建快3走势 贵州快3 甘肃快3 湖北快3