QT基礎知識 多執行緒(第五天)

2021-10-03 07:25:22 字數 2485 閱讀 3156

1,除了多工處理需要執行緒,還有乙個就是當用到定時器,而介面上又有乙個資料處理很複雜的時候,就需要使用多執行緒。

2,qt4中的執行緒的兩種使用方法:

注意執行緒處理函式內部不允許操作圖形介面

第一種,定義乙個類,必須繼承於qthread

class mythread : public qthread//注意應該將複雜的處理放在run函式裡面

啟動執行緒時不能直接呼叫run(),正確的呼叫方法是,thread.start();通過start()間接的呼叫run()函式。

注意:qthread只有run函式是在新執行緒裡的,其他所有函式都在qthread生成的執行緒裡。

執行緒類**:

#include "mythread.h"

mythread::mythread(qobject *parent) : qthread(parent)

void mythread::run()

主程式**:

#include "ui_widget.h"

#include #include widget::widget(qwidget *parent) :

qwidget(parent),

ui(new ui::widget)

void widget::stopthread()

void widget::dealdone()

void widget::dealtimeout()

widget::~widget()

void widget::on_pushbutton_clicked()

//啟動執行緒處理資料

thread->start();

}

第二種,定義乙個類,繼承與qobject;類中設定乙個執行緒函式(只有乙個是執行緒函式)。

基本語法: class mythread : public qobject }

主函式中,1)建立執行緒物件(不能指定父物件)

myt =  new mythread;

2) qthread執行緒物件

qthread *thread = new qthread(this);

3)把自定義執行緒類,加入到子執行緒

a)啟動子執行緒, thread.start();只是把執行緒開啟了,並沒有啟動執行緒處理函式

b)執行緒函式的啟動必須通過signal - slot的方式啟動。

connect(this,訊號,mythread ,&mytimer);

效果圖:

主線程**:

#include "widget.h"

#include "ui_widget.h"

widget::widget(qwidget *parent) :

qwidget(parent),

ui(new ui::widget)

widget::~widget()

void widget::dealclose()

void widget::dealsignal()

void widget::on_buttonstart_clicked()

//啟動執行緒,但是沒有啟動執行緒處理函式

thread -> start();

myt -> setflag(false);

//不能直接呼叫執行緒處理函式,直接呼叫,導致,執行緒處理函式和主線程是在同乙個執行緒

//只能通過訊號和槽的方法來呼叫 myt -> mytimeout

emit startthread();

}void widget::on_buttonstop_clicked()

myt -> setflag(true);

thread -> quit();

thread -> wait();

}

子執行緒**:

#include "mythread.h"

#include mythread::mythread(qobject *parent) : qobject(parent)

void mythread::mytimeout()

}}void mythread::setflag(bool flag)

3,connect第五個引數的作用?注意第五個引數只有在多執行緒時才有用。第五個引數的含義是連線方式,有三種:預設,佇列,直接。

如果是預設的時候:如果是多執行緒,預設使用佇列;如果是單執行緒,預設使用直接方式。

如果是佇列的時候:槽函式所在的執行緒和接收者一樣。

如果是直接方式的時候:槽函式所在的執行緒和傳送者一樣。

Hibernate框架基礎知識第五天

第五天hibernate優化 1.關於快取的理解。快取是介於應用程式和物理資料來源之間,其作用是為了降低應用程式對物理資料來源訪問的頻次,從而提高了應用的執行效能。快取內的資料是對物理資料來源中的資料的複製,應用程式在執行時從快取讀寫資料,在特定的時刻或事件會同步快取和物理資料來源的資料。2.hib...

Android基礎第五天

contents sms raw contacts,data,mimetypes 1 去raw contacts表中取出聯絡人的 id 2 去data表中根據上面的 id查詢對應id的資料 查詢聯絡人的uri contents contents 檢視可以被看成是虛擬表或儲存查詢。可通過檢視訪問的資料...

Python 基礎 第五天

python是高度物件導向的 獲取使用者的輸入內容可以用input 函式實現 也可以使用str string,字串 類的各種方法。可以用rjust方法來獲得乙個右對齊的指定寬度的字串。檔案 可以使用內建的open函式並指定檔名以及自己所希望使用的開啟模式開啟乙個檔案。開啟模式可以是閱讀模式 r 寫入...