C++ / Qt QTime - Как использовать объект

Это более общий для начинающих C++ Вопрос:

У меня есть 2 класса:

  • Класс A, включая метод "ReadData", который вызывается, как только новые данные принимаются сокетом TCP
  • Класс B, включая метод Start, который отправляет большие объемы данных по TCP.

Из-за архитектуры невозможно использовать оба метода в одном классе.

Что я хочу сделать:

  1. Запустите таймер, как только "Старт" в классе B вызывается.
  2. Остановите таймер, как только "ReadData" в классе A вызывается.
  3. Тогда я посчитаю разницу, чтобы увидеть, сколько времени это заняло...

Мой вопрос:

  • Где я могу создать объект:

    QTimer transferTimer;
    
  • Как я могу передать Объект обоим моим Классам?

Как правильно в C++ справиться с этим?

Спасибо.

1 ответ

Решение

Вот одно из возможных решений. Это упрощено, чтобы продемонстрировать идею:

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;
}
Другие вопросы по тегам