QTimer在QThread環境中失效的問題

2022-08-26 17:36:19 字數 1503 閱讀 7160

qtimer在非qthread的環境下能正常工作。但在qthread環境下,需要做一些改動才能正常工作。

建立qt的執行緒有兩種方式:

1. 子例化qthread

可以在虛函式run中啟動定時器,大致的**如下:

//

建構函式,繼承qthread

thread::thread(qobject *parent)

: qthread(parent)

void

thread::run()

//呼叫,啟動執行緒

thread* thread = new thread; //

此處設父指標為this,關閉應用程式時會發生崩潰

thread->start();

兩處指標new的時候不能加this指標,run函式中必須加exec函式。

很不理解qt為什麼會這麼幹???

2. 繼承qobject,使用movetothread移入執行緒

大致的**如下:

calc::calc(int start, int

step)

: m_cur(start)

, m_step(step)

calc* c = new calc(0, 1);

建構函式內兩處指標new的時候,也不能加this

具體的**如下:

#ifndef widget_h

#define widget_h#include

#include

qt_begin_namespace

class

qtimer;

class

thread;

class widget : public

qwidget

;class thread : public

qthread

;class calc : public

qobject

;qt_end_namespace

#endif

//widget_h

#include

"widget.h

"#include

#include

widget::widget(qwidget *parent)

: qwidget(parent)

widget::~widget()

//建構函式,繼承qthread

thread::thread(qobject *parent)

: qthread(parent)

void

thread::display()

void

thread::run()

calc::calc(

int start, int

step)

: m_cur(start)

, m_step(step)

void

calc::display()

QThread和QTimer的使用方法

說明 1 一下小結不保證對,如果錯誤希望指正 2 queue和direc代表是的connect的鏈結方式,qt directconnection和qt queuedconnection 小結 我想實現的乙個小定時器程式 輸入s start 定時器啟動,列印資訊。輸入e end 定時器停止執行.大概實...

在QThread中使用slots

qthread 似乎是很難的乙個東西,特別是訊號和槽,有非常多的人 儘管使用者本人往往不知道 在用不恰當 甚至錯誤 的方式在使用 qthread,隨便用google一搜,就能搜出大量結果出來。無怪乎qt的開發人員 bradley t.hughes 聲嘶力竭地喊you are doing it wro...

QTimer在子執行緒中的簡單使用

碎碎念 剛開始學習qt,一開始準備建立乙個迴圈放在子執行緒中執行,想到了在子執行緒中使用qtimer定時器。但是遇到了執行緒操作相關的問題,導致程式一直報錯 定時器不可被其他的執行緒關閉 登出。這個問題困擾了我好久,後來仔細看qt的執行緒執行機制,在qt5中,是先建立執行緒,然後通過訊號 槽的機制讓...