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

标签 c++ qt qtime

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

我有 2 个类:

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

由于体系结构的原因,不可能在一个类中同时拥有这两种方法。

我想做的事情:

  1. 调用类 B 中的“开始”后立即启动计时器。
  2. 一旦调用 A 类中的“ReadData”就停止定时器。
  3. 然后我会计算差值,看看需要多长时间...

我的问题:

  • 我在哪里创建对象:

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

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

谢谢。

最佳答案

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

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

关于C++/Qt QTime - 如何使用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48581735/

相关文章:

c++ - std::getline() 在使用 cout 时返回内存地址

c++ - 管理在多个控制台窗口中运行的程序?

javascript - QTcpSocket 不刷新 HTTP header ( cometd 模式)

c++ - QTimeDate::currentDateTime 没有按预期工作

c++ - 在 C++ 中使用函数指针调用函数

c++ - 使用带有 Xcode 的 C++ 清除控制台?

c++ - QJson for Linux - 不确定如何正确使用 QJSON

c++ - Qt Gridlayout 不重新对齐 GUI 元素

c++ - 在 QwtPlot 中使用 QTime 作为 X 轴