qt 執行緒與ui執行緒同步

2021-05-23 10:30:53 字數 1273 閱讀 2176

qt 執行緒與ui執行緒同步 收藏

本文**:http://hi.baidu.com/buptyoyo/blog/item/b7b035ef2233a9d8b31cb137.html

目前只會一種,採用訊號槽機制。

通常情況下,訊號和槽機制可以同步操作,這就意味著在發射訊號的時候,使用直接函式即可以立刻呼叫連線到乙個訊號上的多個槽。

然而,當連線位於不同執行緒中的物件時,這一機制就會變得不同步起來,可以通過修改qobject::connect()的第5個可選引數而改變。

connect的第五個引數qt::queuedconnection表示槽函式由接受訊號的執行緒所執行,如果不加表示槽函式由發出訊號的次執行緒執行。

當傳遞訊號的引數型別不是qt的元型別時要先註冊,關於qt的元型別可以參看qt文件

qmetatype這個類裡面列舉了所有的元型別。

以qstring為例,註冊時首先q_declare_metatype(qstring);

然後,int id=qregistermetatype("qstring");

加上這兩句就註冊成功了。

貼個示例的**,次執行緒不斷更改乙個qstring傳給gui主線程,主線程在gui介面上顯示。

mythread.h

#ifndef mythread_h

#define mythread_h

#include

class mythread : public qthread

;#endif // mythread_h

widgett.h

#ifndef widgett_h

#define widgett_h

#include

#include "ui_widgett.h"

class widgett : public qmainwindow

;#endif // widgett_h

mythread.cpp

#include "mythread.h"

mythread::mythread()

: qthread()

}widgett.cpp

#include "widgett.h"

#include "mythread.h"

q_declare_metatype(qstring);

widgett::widgett(qwidget *parent, qt::wflags flags)

: qmainwindow(parent, flags)

widgett::~widgett()

Qt中UI執行緒與子執行緒的互動

gui框架一般只允許ui執行緒操作介面元件,qt也是如此。但我們的應用程式一般是多執行緒的,勢必就涉及到ui執行緒與子執行緒的互動。下面介紹常用的ui執行緒與子執行緒互動方式,並附上自己的demo。qt中提供了一些執行緒安全的方法來讓我們使用 a.使用訊號槽 qt的訊號槽是執行緒安全的。connec...

Qt之執行緒同步

qt中實現了如下類,提供執行緒同步機制 qmutex 互斥量。用來確保同一時刻,只能有乙個執行緒訪問某一資源。qreadwritelock 讀寫鎖。允許同一時刻多個執行緒讀取某一資源,但只要有乙個執行緒在寫該資源,則不允許其他程同時讀取該資源。qwaitcondition 等待條件。提供了乙個條件變...

Qt多執行緒同步

一 qt中使用多執行緒時候,多執行緒的同步就是乙個不可避免的問題。多執行緒的同步就是使多個執行緒在同時執行同一段 的時候,有順序的執行,不會出現同時有兩個或者多個執行緒執行同一段 的情況,特別是在對變數或者檔案執行寫操作的時候。也就是所謂的執行緒安全,執行緒安全指的是這段 在乙個執行緒或者多個執行緒...