人妻丰满熟妇AV无码片,岛国AV无码免费无禁网站,丰满岳乱妇一区二区三区,男插女高潮一区二区

QT多線程異步編程

上位機(jī)軟件 2023-03-10 18:00:11

golang 要想開個線程,直接 一個go 命令,node 異步多線程是function天生默認(rèn)的

多線程異步在某些領(lǐng)域是非常常用的


Qt有兩種多線程的方法,其中一種是繼承QThread的run函數(shù),

另外一種是把一個繼承于QObject的類用moveToThread函數(shù)轉(zhuǎn)移到一個Thread里。 

Qt4.8之前都是使用繼承QThread的run這種方法,但是Qt4.8之后,Qt官方建議使用moveToThread第二種方法。



下面記錄一下moveToThread()的簡單用法,防止遺忘:

1:定義一個繼承于QObject的類A

2:然后用這個類的一個實例a調(diào)用moveToThread(),將QThread的一個實例thread的指針傳進(jìn)moveToThread()

     a.moveToThread(&thread);

3:然后啟動線程,thread.start()

4:把要處理的事務(wù)放在doWork函數(shù)中,再利用connect,線程一啟動的話就會運行doWork函數(shù)

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





再粘貼個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();

};



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

老式進(jìn)程內(nèi)往往用msleep制作循環(huán)的間隔也是非常不好的,因為sleep前后有資源消耗的時間,導(dǎo)致sleep的時間實際上并不準(zhǔn)確的。

老式進(jìn)程內(nèi)只有run() 方法再新線程中運行,而moveToThread 是全部都在新線程中運行。


--------------------
原文地址:https://soft.pbottle.com/a-13513.html

上位機(jī)軟件方案

咨詢小瓶科技
咨詢我們
頂部