0

我有两个时间计算相同的函数。第一个需要大约 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 进行连接,因此在两个线程上同时进行调用。不用担心,这不会产生两秒钟的开销。

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 回答