1. 程式人生 > >QT中使用另外的執行緒執行定時器(不用新建QThread子類)

QT中使用另外的執行緒執行定時器(不用新建QThread子類)

編寫QT程式時,時常會需要使用定時器QTimer來執行一些定時任務,但當定時任務執行的時間過長,則會影響整個介面的響應,因此會想到使用另一個工作執行緒來執行定時器,一般情況下可以選擇從QThread派生一個執行緒類,然後過載run並執行任務邏輯,那下面就介紹一個不用從QThread派生並使用QTimer的例子。

在類定義public中新增

    QThread* _TimerThread;
    QTimer* _WriteTimer;
    void WriteTimestop();

 在private slot中新增

    void _onWriteTimeout();

  建構函式中新增:

     // 使用一個執行緒,跑定時器
        _TimerThread = new QThread;
        _WriteTimer = new QTimer;
       // _WriteTimer->setSingleShot(true);   //千萬不要新增這一行,新增後新執行緒只執行一下就結束了,造成定時器只會觸發一次timeout
        // 在moveToThread前先啟動定時器,不然不在一個執行緒裡,直接呼叫start會失敗
        _WriteTimer->start(2000);
        _WriteTimer->moveToThread(_TimerThread);
        // 定時器物件和this不在一個執行緒裡面,因此這邊指定了連線方式為Qt::DirectConnection,由定時器所線上程直接觸發_onVoiceTimeout
        connect(_WriteTimer, SIGNAL(timeout()), this, SLOT(_onWriteTimeout()), Qt::DirectConnection);
        // 連線定時器槽,用來停止定時器
        connect(this, SIGNAL(WriteTimestop()), _WriteTimer, SLOT(stop()));
        _TimerThread->start();
   
在解構函式中新增:
   emit WriteTimestop();
    _TimerThread->quit();
    _TimerThread->wait();
    delete _WriteTimer;
    delete _TimerThread;

轉載自:http://blog.csdn.net/xwdpepsi/article/details/8607496

相關推薦

QT使用另外執行執行定時不用新建QThread

編寫QT程式時,時常會需要使用定時器QTimer來執行一些定時任務,但當定時任務執行的時間過長,則會影響整個介面的響應,因此會想到使用另一個工作執行緒來執行定時器,一般情況下可以選擇從QThread派生一個執行緒類,然

《完美Qt》之執行呼叫定時

線上程中呼叫定時器 嗨,大家好,我們都知道無論執行緒和定時器,這兩個單獨使用都非常簡單,Qt幫助文件有很詳細的Demo。但是線上程中使用定時器就稍微有點麻煩了,一不注意就容易掉坑裡。 首先理解connect的第五個引數很重要—連線型別 1、connec

執行學習----定時(二)

1.建立一個定時器,執行某個任務,第一次執行在10s鍾以後,之後每隔1s鍾執行一次。 new Timer().schedule(new TimerTask() { @Override public void run() { System.out.println("bom

【SSH網上商城專案實戰15】執行定時同步首頁資料類似於部落格定期更新排名

  轉自:https://blog.csdn.net/eson_15/article/details/51387378   上一節我們做完了首頁UI介面,但是有個問題:如果我在後臺添加了一個商品,那麼我必須重啟一下伺服器才能重新同步後臺資料,然後重新整理首頁才能同步資

執行&定時Timer&同步&執行通訊&ThreadLocal

1.多執行緒 執行緒狀態分為:新建狀態、就緒狀態、執行狀態、阻塞狀態、死亡狀態 物件等待池的阻塞狀態:執行狀態執行了wait方法 對向鎖池的阻塞狀態:試圖獲得某個同步鎖,已經被其他執行緒佔用,就會放到物件的鎖池中 其他阻塞狀態:執行了s

linux 多執行定時

  linux則只允許單程序擁有一個定時器,因此在linux下的單程序中要使用多個定時器,則需要自己維護管理。 方法一: 程序中只有一個定時器,通過標誌位,可以在不同時間執行不同的任務。 方法二: Linux程序多個定時器  實現資料更新 資料上傳 #in

關於Java Web 使用Spring使用Quartz(定時呼叫、實現固定時間執行), 觸發定時執行某些任務的例項

第一步:pom.xml中Maven下載需要的jar架包。 <!--```````````定時器```````````--> <dependency> <grou

C# 執行定時的使用

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace ConsoleApplication1 {     class

Python基礎34_執行-條件,定時,佇列,執行池, 協程

 執行緒 一. 條件     使得執行緒等待,只有滿足某條件時,才釋放n個執行緒     import time     from threading import Thread,

C#多執行實現定時

     我們在寫winfrom時經常會用到定時器,比如客戶端通過socket定時向伺服器傳送檢測包等。.netframework提供了一個定時器控制元件System.Windows.Forms.Timer,使用很方便。      其實通過C#多執行緒也可以實現定時器功能。

執行常用操作方法sleep、yield、join

執行緒的命名與取得 執行緒的命名: 通過構造方法在建立執行緒時設定執行緒名稱 直接繼承Thread類: public Thread (String name); Runable或者Callable介面實現多執行緒: public Thread (Run

java:執行池任務提交Runnable、Callable、FutureTask

任務的封裝與執行過程 (注:下面所說的Runnable物件,Callable物件都是指實現了該介面的類的物件) 之前要交給執行緒執行的任務我們都把它封裝在Runnable中。對於執行緒池而言,多了一種Callable的封裝方式。 Runnable:其中的run()方法沒有返回值。

iOS開發—執行之間資源共享以賣火車票為例—同步鎖的使用

      程序中的一塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源,這裡的資源包括物件、變數、檔案等。當多個執行緒同時訪問同一塊資源時,會造成資源搶奪,很容易引發資料錯亂和資料安全問題。      為了更好的理解執行緒安全的問題,引入一個賣票的案例,同

【STM32】SysTick滴答定時delay延時函式講解

STM32F1xx官方資料:《Cortex-M3權威指南-中文》-第8章最後一個小節:Systick定時器SysTick定時器Systick定時器,是一個簡單的定時器,對於CM3、CM4核心晶片,都有Systick定時器。Systick定時器常用來做延時,或者實時系統的心跳時

idea同步svn的maven專案,配置專案帶Spring Boot啟動

同步svn專案 新建專案 制定svn地址,並從svn地址中checkout專案 選擇checkout的地址(本地專案放置地址,此地址不包含專案目錄),並點選ok 選擇專案放置的地址(在此處我選擇的是第三個地址。此地址包含專案名) 選擇jdk版本,根據自身情況選擇

MFC關於檔案的讀取和儲存使用CFile與CFileDialog

       CFile::modeCreate 構造新檔案,如果檔案存在,則長度變為0        CFile::modeNoTruncate 該屬性和modeCreate聯合使用,可以達到如下效果:如果檔案存在,則不會將檔案的長度置為0,如果不存在,則會由modeCreate屬性來建立一個新檔案。  

QT使用GDAL多執行讀取遙感影象到QImage

GDAL 是一個很強大的可以讀取很多格式 的帶有GIS資訊的柵格型影象。前陣子專案中需要讀取遙感影象,並顯示到QT介面,由於遙感影象一般很大,所以採取新開一個讀圖執行緒的方式來讀取,防止介面假死。下面是程式碼共享,測試通過讀取500MB的24000*24000畫素GeoTiff圖並在QT的QGr

qt 建立一個工作執行例子

當一個事件需要很長的處理時間,就建立一個工作執行緒,防止主介面卡死。 1.新建一個QT的gui專案,裡面包含main.cpp,mainwindow.h,mainwindow.cpp,mainwindow.ui檔案 2.新建一個頭檔案thread.h,派生一個執行緒類,重新寫一個執行緒的入口函式。

QTQtConcurrent建立並行執行的方法

標頭檔案中: #include <QtConcurrentRun> #include <QProcess> #include <QFuture> protected: bool event(QEvent *even

qt資料庫多執行問題的解決QSqlDatabase 同一個連線只能在建立它的執行使用

注意:連線名和資料庫名是完全兩樣東西 Qt資料庫由QSqlDatabase::addDatabase()生成的QSqlDatabase只能在建立它的執行緒中使用, 在多執行緒中共用連線或者在另外一個執行緒中建立query都是不支援的 幾乎國內沒有文章提到這個問題,這幾天