没有QTimer的异步控制

时间:2016-04-19 14:53:18

标签: qt asynchronous

有没有办法在不使用QTimer的情况下进行更高性能的异步处理?

基本上我有一个single_step函数,要么应该在"单步"之后调用。按下按钮,或在"开始"之后循环按下按钮,直到"停止"按下按钮。

延迟时间为QTimer

0工作正常,但性能有点慢。我正在寻找替代品。

2 个答案:

答案 0 :(得分:0)

您可以将QMetaObject::invokeMethod()Qt::QueuedConnection一起使用。

我不知道它会不会更快。开销的主要来源仍然是事件系统。你肯定不希望异步性太细粒度。

答案 1 :(得分:0)

single_step函数的功能太少了。你应该连续多次调用它,例如:

class Worder : public QObject {
  QBasicTimer m_timer;
  ...
  void single_step();
  void work_chunk() { for (int i = 0; i < 100; ++i) single_step(); }
  ...
  void timerEvent(QTimerEvent* ev) {
    if (ev->timerId() == m_timer.timerId())
      work_chunk();
  }
};