いくつかの新しいワーカーを作成し、それらを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);
}
免責事項: このコードはその場で作成したものです。磨きがかかる場合がありますが、意味を理解していただければ幸いです。