簡體   English   中英

使用Qt的同步信號

[英]Synchronous signals using Qt

我有兩個函數,它們的時間計算是相同的。 第一次大約需要2秒才能顯示結果。 第二個是一樣的。

但是,當我顯示不同的結果時,它需要時間的總和,並且要使結果在4秒鍾內(對於兩個功能)並行顯示(而不是每個2秒鍾)

QTimer* timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(capture()));
connect(timer, SIGNAL(timeout()), this, SLOT(capture_2()));
timer->start(0);

如何建立通話以使其在2秒鍾內正常工作?

我將創建幾個新的工作程序,將它們鏈接到QThreads並將您的信號連接到每個工作程序上的插槽。 訣竅是傳遞標志Qt :: QueuedConnection進行連接,以便在兩個線程上同時進行調用。 不用擔心,這不會產生兩秒鍾的開銷。

class Worker1 : public QObject
{
Q_OBJECT;
public slots:
    void capture(void);
}

class Worker2 : public QObject
{
Q_OBJECT;
public slots:
    void capture(void);
}


void setup( void )
{
Worker1 * w1 = new Worker1;
Worker2 * w2 = new Worker2;

QThread * t1 = new QThread( w1 );
QThread * t2 = new QThread( w2 );

w1->moveToThread( t1 );
w2->moveToThread( t2 );

t1->start();
t2->start();

QTimer* timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), w1, SLOT(capture()), Qt::QueuedConnection );
connect(timer, SIGNAL(timeout()), w2, SLOT(capture()), Qt::QueuedConnection );
timer->start(0);
}

免責聲明:我是當場編寫這段代碼的,可能需要一些修飾,但是希望您能理解我的意思。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM