C++ / Qt QTime - 如何使用对象
C++ / Qt QTime - How to use the object
这是一个比较一般的C++初学者问题:
我有 2 个 classes:
- Class A,包括一个'ReadData'方法,当TCP Socket
接收到新数据时调用该方法
- Class B,包括一个通过 TCP 发送大量数据的方法 'Start'。
由于架构原因,不可能将两种方法合二为一class。
我想做的事情:
- 一旦 Class B 中的 'Start' 被调用,就启动一个计时器。
- 一旦 'ReadData'in Class A 被调用,立即停止计时器。
- 那我算一下差额,看看用了多长时间...
我的问题:
我在哪里创建对象:
QTimer transferTimer;
如何将对象传递给我的两个 Classes?
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++初学者问题:
我有 2 个 classes:
- Class A,包括一个'ReadData'方法,当TCP Socket 接收到新数据时调用该方法
- Class B,包括一个通过 TCP 发送大量数据的方法 'Start'。
由于架构原因,不可能将两种方法合二为一class。
我想做的事情:
- 一旦 Class B 中的 'Start' 被调用,就启动一个计时器。
- 一旦 'ReadData'in Class A 被调用,立即停止计时器。
- 那我算一下差额,看看用了多长时间...
我的问题:
我在哪里创建对象:
QTimer transferTimer;
如何将对象传递给我的两个 Classes?
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;
}