控制QTimer的时间
Controlling time of QTimer?
我正在考虑使用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++为构建时间获取QDateTime的可靠方法
- 从持续时间构造std::chrono::system_clock::time_point
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 使用简单类型列表实现的指数编译时间.为什么
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在已经使用Git的情况下减少编译时间
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 从文本文件中读取时钟时间和事件时间并进行处理
- 具有未知值时的时间复杂性
- 如何减少花费的时间
- C++在变量给定的指定时间内关闭电脑
- rcpp函数中的清理时间很长
- C++:floor unix时间戳到UTC月份
- 如何在c++中录制具有精确帧时间戳的视频
- QTimer 长时间超时
- 为什么QTimer::singleShot在时间1阻塞了我的主线程而不是0
- 控制QTimer的时间
- QGLWidget的QTimer,其他机器上的图纸和时间不正确