C ++ / Qt QTime - 如何使用该对象

时间:2018-02-02 11:28:26

标签: c++ qt qtime

这更像是一个普通的C ++初学者问题:

我有2个班级:

  • A类,包括'ReadData'方法,一旦TCP Socket收到新数据就会调用
  • B类,包括通过TCP发送大量数据的方法“开始”。

由于这种架构,它不可能在一个类中同时使用这两种方法。

我想做什么:

  1. 调用B类中的“Start”后立即启动计时器。
  2. 在调用A类中的'ReadData'时立即停止计时器。
  3. 然后我会计算差异,看看花了多长时间......
  4. 我的问题:

    • 我在哪里创建对象:

      QTimer transferTimer;
      
    • 如何将Object传递给我的两个类?

    C ++中如何正确处理这个问题?

    谢谢。

1 个答案:

答案 0 :(得分:3)

这是可能的解决方案之一。它被简化以证明这个想法:

class C
{
public:
  void start()
  {
    m_startTime = QTime::currentTime();
  }

  void stop()
  {
    m_endTime = QTime::currentTime();
  }

  int difference() const
  {
    return m_startTime.secsTo(m_endTime);
  }

private:
  QTime m_startTime;
  QTime m_endTime;
};

class A
{
public:
  A(std::shared_ptr<C> c) : m_c(c)
  {}

  void ReadData()
  {
    // ...
    m_c->stop();

    int transferTime = m_c->difference(); // seconds
  }

private:
  std::shared_ptr<C> m_c;
};

class B
{
public:
  B(std::shared_ptr<C> c) : m_c(c)
  {}

  void start()
  {
    // ...
    m_c->start();
  }

private:
  std::shared_ptr<C> m_c;
};

int main(int argc, char ** argv)
{
  auto c = std::make_shared<C>();
  // a and b keep reference to instance of class C
  A a(c);
  B b(c);

  [..]
  return 0;
}