1. 程式人生 > >QThread中的事件迴圈

QThread中的事件迴圈

1 背景

    據QThread的官方文件說明,可以通過2中方式來實現一個執行緒,其中一種方法就是繼承QThread並且實現其中的run()函式:

class WorkerThread : public QThread
{
    Q_OBJECT
    void run() {
		...
    }
};
    通過start()來啟動WorkerThread的例項,將會使得run()在一個新執行緒中執行。

2 何時終止

    當上述的run()函式執行完畢時候,新執行緒也就結束了,並且發出finished()訊號。

3 事件迴圈

    然而,有時候我們並不希望執行緒終止,而是希望它原地待命

。這時候需要它進入事件迴圈(否則不能接受訊息)。根據QThread的官方文件解析,需用在run()中呼叫exec()使其進入事件迴圈

class WorkerThread : public QThread
{
    Q_OBJECT
    void run() {
		...			// 一些必要的處理
		exec(); 	// 進入事件迴圈
    }
};
    這樣子,新執行緒就不會因為run()的結束而退出,而是一直在等待事件。可以通過向其傳送訊號,使其執行指定的工作(在新執行緒中)。

參考資料

相關推薦

QThread事件迴圈

1 背景     據QThread的官方文件說明,可以通過2中方式來實現一個執行緒,其中一種方法就是繼承QThread並且實現其中的run()函式: class WorkerThread : public QThread { Q_OBJECT void r

JavaScipt 事件迴圈機制,以及微任務 和巨集任務的概念

說事件迴圈(event loop)之前先要搞清楚幾個問題。 1. js為什麼是單執行緒的?   試想一下,如果js不是單執行緒的,同時有兩個方法作用dom,一個刪除,一個修改,那麼這時候瀏覽器該聽誰的?這就是js被設計成單執行緒的原因。   2.js為什麼需要非同步?

node 談談 Event Loop(事件迴圈)機制

在講 Event Loop (事件迴圈)之前,我們來了解點 node 的東西,來幫助我們更加明白事件迴圈是幹什麼的 Node 是什麼 Node.js 是一個基於 Chrome V8 引擎的 JavaScript 執行環境,Node 不是一門語言,是讓 js 執行在後端的,執行時不包括 js

JavaScipt 事件迴圈(event loop),以及微任務 和巨集任務的概念

說事件迴圈(event loop)之前先要搞清楚幾個問題。 1. js為什麼是單執行緒的?   試想一下,如果js不是單執行緒的,同時有兩個方法作用dom,一個刪除,一個修改,那麼這時候瀏覽器該聽誰的?這就是js被設計成單執行緒的原因。   2.js為什麼需要非同步?

node.js對Event Loop事件迴圈的理解

javascript是單執行緒的,所以任務的執行都需要排隊,任務分為兩種,一種是同步任務,一種是非同步任務。 同步任務是進入主執行緒上排隊執行的任務,上一個任務執行完了,下一個任務才會執行。 非同步任務是不進入主執行緒,而是進入一個 "任務佇列" 裡,"任務佇列" 通知主執行緒,該非同步任務才會進入主執行

詳解JavaScript的Event Loop(事件迴圈)機制

前言我們都知道,javascript從誕生之日起就是一門單執行緒的非阻塞的指令碼語言。這是由其最初的用途來決定的:與瀏覽器互動。單執行緒意味著,javascript程式碼在執行的任何時候,都只有一個主執行緒來處理所有的任務。而非阻塞則是當代碼需要進行一項非同步任務(無法立刻返

libev IO事件迴圈解析

1、IO事件基本資料結構ev_io struct ev_io這個結構體是IO監視器。libev中所有的事件均有自己的一個結構體來表示,如時間事件是ev_time、ev_io等。 基類ev_watcher定義如下: typedef struct ev_watcher {

C#按鈕事件迴圈,用另一個按鈕控制停止,暫停,繼續程式執行

首先在窗體上有 lable1,//執行顯示 button1,//開始 button2,//暫停和繼續 button3//停止 窗體上還放Timer控制元件timer1 程式碼實現如下, using System; using System.Collections.Gener

前端事件迴圈eventloop機制

我們知道 js 是單執行緒執行的,那麼非同步的程式碼 js 是怎麼處理的呢?例如下面的程式碼是如何進行輸出的: console.log(1); setTimeout(function() { console.log(2); }, 0); new Promise(function(resolve) {

【nodejs原理&原始碼賞析(7)】【譯】Node.js事件迴圈,定時器和process.nextTick

目錄 Event Loop 是什麼? Event Loop 基本解釋 事件迴圈階段概覽 事件迴圈細節 timers pending callbacks poll

瀏覽器 JS 的事件迴圈機制

目錄 事件迴圈機制 巨集任務與微任務 例項分析 參考 1.事件迴圈機制 瀏覽器執行JS程式碼大致可以分為三個步驟,而這三個步驟的往復構成了JS的事件迴圈機制(如圖)。 第一步:主執行緒(JS引擎執行緒)中執行JS整體程式碼或回撥函式(也就是巨集任務),執行過程中會將物件儲存到堆(heap)中,將函式

瀏覽器事件迴圈機制【看完就懂】

# 什麼是事件迴圈機制 相信大家看過很多類似下面這樣的程式碼: ```javascript function printNumber(){ console.log('printNumber'); } s

JS事件的執行順序和AJAX的異步

容易 jquery 博客 出現問題 同步 內容 img 留言 加載 之前了解過異步和同步,知道同步是順序執行,異步是同時執行,但是沒有遇到過這種情況,不是很理解,這兩天做項目突然遇到了,對這有了一個初步的認識。廢話不多說,直接上要求。 1.項目要求:外部調用x

JavaScript事件的target屬性

button name 點擊事件 .html hasclass alert -c color min target 事件屬性可返回事件的目標節點(哪個 DOM 元素觸發了該事件),如生成事件的元素、文檔或窗口。 語法:event.target <html> &

C#事件的動態調用實現方法

ear too new std 實現 bject multicast using pad 本文實例講述了C#動態調用事件的方法。一般來說,傳統的思路是,通過Reflection.EventInfo獲得事件的信息,然後使用GetRaiseMethod方法獲得事件被觸發後調用

JS事件綁定

js事件綁定事件綁定事件綁定IE方式 attactEvent(事件名稱,函數),綁定事件處理函數 derachEvent(事件名稱,函數),解除綁定DOM方式 addEventListener(事件名稱,函數,捕獲) removeEventListener(事件

JS事件綁定的三種方式

events load textarea sch 事件 ron 事件綁定 upload fun 以下是搜集的在JS中事件綁定的三種方式。 1. HTML onclick attribute <button type="button" id="upload"

JavaScript事件綁定的三種方式

element blog href 轉載 pre 模型 www. 初學者 進行 JavaScript使得網頁與用戶友好交互,在使用 js 進行時間綁定的時候有三種綁定方式。 第一種:初學者以及普通寫法 1 <div id="dom0"> 2 &

描述wxWidgets事件處理的類型轉化

format type() The invalid connect tracker efi AC RM wxWidgets是一個比較常用的UI界面庫,我曾經試著使用wxWidgets寫一個UI編輯工具,在此期間,學習了一些wxWidgets的知識。我對wxWidgets的綁

react事件冒泡之填坑

app 簡單 冒泡 wrapper change checked 執行 class 讓我 今天在寫個組件,大致代碼是這樣的: class Switch extends React.Component { handlerChange = (e) => {