在 VC++ 中设计定时器功能

Posted

技术标签:

【中文标题】在 VC++ 中设计定时器功能【英文标题】:Designing a timer functionality in VC++ 【发布时间】:2013-02-19 13:16:12 【问题描述】:

我正在实现一些功能,其中我在数据库上获得一组查询一个不应该在一段时间内松开查询让我们说大约 5 分钟,除非并且直到查询执行良好(这是在数据库关闭的情况下,我们不松开查询)。所以,我想做的是通过不同的线程为每个查询设置一种计时器,并在那个时间范围内等待它,最后如果它仍然存在,将它从队列中删除,但是,我对此解决方案不满意,因为我必须创建与查询数量一样多的线程。有没有更好的方法来设计这个(环境是vc++),如果问题不清楚,请告诉我,我会尝试更好地框架它。

【问题讨论】:

所以,您想在查询中添加基本超时功能,但是,您当前的方法,即为每个查询生成一个新线程,您对此不满意吗? 为什么每个定时器都需要单独的线程?现在只需存储到期时间 + 5 分钟。 @Luke :是的,我目前正在将所有查询放在一个队列中,并将在 2 种情况下将它们删除。 1.查询是否执行成功 2.线程是否超时。 @ÖöTiib :对不起,我对你的陈述有点不清楚。就像我在上一个声明和问题中所说的那样,每个查询都应该保持一段时间以考虑数据库停机时间。因此,每个查询都应该有一个与之关联的计时器。我正在通过线程实现此计时器功能。我正在寻找更好的解决方案.. 这就是我不知道为什么? Windows 具有发送消息的计时器和可等待的计时器。这些都不需要单独的线程。过时的超时内容的清理可以不时地从单线程作为最低优先级任务完成。您唯一需要做的就是能够确定周围是否有“最佳之前”结束。因此,将这些数据添加到您的队列中。 【参考方案1】:

一个线程足以让我们每 10 秒检查一次,您的队列中没有已达到到期时间的查询,因此应该中止/回滚。

队列通常从一端增长并从另一端删除,因此您只需检查最旧项目所在端的查询是否未达到其到期时间。

【讨论】:

以上是关于在 VC++ 中设计定时器功能的主要内容,如果未能解决你的问题,请参考以下文章

VC 怎样用线程来实现定时器?

vcmfc定时器

51单片机利用定时器计数来作为延时函数调用

帮忙用VC++6.0编写一个简易计时器。当鼠标左键单击时开始计时,鼠标右键单击时停止计时。

VC++使用SDL定时器替代Windows窗口定时器消息(附源码)

用STM32定时器捕获做脉冲输入计数,一定要用ETR管脚嘛,其他的比如TIM_CH0可以吗