我正在使用一个表(结构)来存储接收到的消息的条目。我需要定期监视每个条目的特定操作,这就是为什么我想为每个创建的条目创建一个计时器以监视该条目在表中已经存在多长时间的原因,并且基于持续时间,我需要执行一些命令并重新启动计时器。
我是C语言中的计时器和回调的新手,但我知道每个计时器都会导致一个新线程。我的问题是,我可以在一个标准板上创建多少个计时器?
我知道另一种方法是为计时器操作添加一个新成员,并在表上进行迭代,以使其在一个计时器的非关键事件中正常工作,但是我试图避免这种情况,因为表条目可能会影响整个程序。如果不可能创建许多计时器(+1000),那么执行此操作的另一个理想方法是什么?
答案 0 :(得分:1)
如果表中的条目应在特定时间“过期”(并删除),那么这是一种可能的解决方案,仅使用单个计时器即可:
首先使用优先级队列,其中“优先级”是到期时间。当然,您可以使用任何其他类似表的结构,但要使其在到期时间上保持排序(稍后会简化操作)。
然后有一个循环计时器,该计时器每秒被触发十次,二十次甚至更多次。
触发计时器时,您将获得当前时间,只需删除表中过期时间已过的所有元素(将其过期时间与当前时间进行比较)即可。如果该表是按到期日期排序的,那么这是一个非常简单的循环,您可以在其中比较“ top”元素中的时间,如果过期,则“ pop”顶部元素。
您几乎可以在任何与时间有关的问题上使用相同或相似的技术。