我正在考虑使用 C++ 和 Qt 重写一些现有的 C 代码。在 C 代码中,poll
用于检查来自多个源的输入,每个源都有一个超时值和一些与之相关的特定行为。例如
- 在
intput0
上静默 5 分钟后,我们假设对方已经死亡,我们尝试重新建立联系 - 我们希望客户端连接到
socket0
- 一旦客户端连接到
socket0
,就会调用accept
(socket1
),客户端有时间发出请求在socket1
关闭之前
通过使用LD_PRELOAD
和“隐藏”涉及的系统函数(poll
, gettimeofday
) 可以(某种程度上)轻松控制时间的流逝并触发超时。
转向 Qt 我计划将文件描述符包装在 QSocketNotifier
的实例中,并将 activated(int)
信号连接到合适的插槽。这基本上提供了一个 Qt 风格的 poll
——除了没有超时!
对于超时,我正在考虑将 QTimer
耦合到每个 QSocketNotifier
。我的实验表明这是可行的,而且相当优雅。但是,测试并不令人愉快。我真的无法进行等待 5 分钟超时的测试。
如何使该解决方案中的超时可测试?
(或者也许我只是以错误的方式思考这个问题,应该做一些完全不同的事情。)
最佳答案
我相信这个问题可以解释为“如何模拟 QTimer
?”这个改写后的问题的答案是“间接的”。您可以使用 QTimer
的抽象来编写您的主程序,然后测试代码会模拟它以根据测试需要而不是根据时间发出信号。
解决这个问题的一种特殊方法是让测试代码断开插槽与 QTimer
信号的连接,并在其位置连接自己的信号。
关于c++ - 控制QTimer的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40401863/