0

時間計算が同じである 2 つの関数があります。最初は結果が表示されるまでに約 2 秒かかります。2番目は同じです。

しかし、異なる結果を表示すると、合計時間の計算が必要になり、結果が (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 秒で機能するように呼び出しを確立するにはどうすればよいですか?

4

1 に答える 1

1

いくつかの新しいワーカーを作成し、それらをQThreadsにリンクし、シグナルを各ワーカーのスロットに接続します。秘訣は、フラグ Qt::QueuedConnection を渡して接続することです。これにより、呼び出しは両方のスレッドで同時に行われます。心配する必要はありません。2 秒のオーバーヘッドは発生しません。

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);
}

免責事項: このコードはその場で作成したものです。磨きがかかる場合がありますが、意味を理解していただければ幸いです。

于 2013-06-03T15:58:54.557 に答える