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, intstep)
: 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中,是先建立執行緒,然後通過訊號 槽的機制讓...