需求
大部分程序会有一些需要周期执行的事情,也有一些需要在程序启动后执行一次的事情。很明显这类事情和时间有关,因为它们都需要在特定时间发生。这类需要执行的逻辑可以由时间事件发生器触发。
时间事件发生器
时间事件发生器是挂载在虚拟根VirtualRoot上的一个组件,它负责在特定的时间将特定类型的事件发布到系统总线上去。时间事件发生器会发布的事件有:
HasBoot1SecondEventHasBoot2SecondEventHasBoot5SecondEventHasBoot10SecondEventHasBoot20SecondEventHasBoot1MinuteEventHasBoot2MinuteEventHasBoot5MinuteEventHasBoot10MinuteEventHasBoot20MinuteEventHasBoot50MinuteEventHasBoot100MinuteEventHasBoot24HourEvent?Per1SecondEventPer2SecondEventPer5SecondEventPer10SecondEventPer20SecondEventPer1MinuteEventPer2MinuteEventPer5MinuteEventPer10MinuteEventPer20MinuteEventPer50MinuteEventPer100MinuteEventPer24HourEvent
以上26种时间事件的设计灵感来源于人民币币值的设计,具体为什么是这些数值我们不做深究,实践证明这些数值正是开源矿工所需要的。
由谁发出这些时间事件?
可以看出,这类时间事件不属于任何模块,它们是由硬件系统的cpu发出的,所以对于我们的系统来说应该把时间事件发生器放在我们的系统的虚拟根VirtualRoot上。
这些消息发送到什么地方去?
发布到系统总线上去。每一个系统都应该有自己内部的系统总线,时间事件消息正是发布到系统自己内部的总线上去的。系统内部的各组件根据自己的需求从总线上订阅事件修建事件消息所行走的路径。
力:走那条线程驱动这类事件?
如果你的系统是单线程的系统就不存在这个问题了,如果是多线程的系统尤其是带界面的系统的话这会是一个问题。根据自己的情况,这类事件可以由UI主线程驱动也可以由非UI线程驱动,值得注意的是如果这个事件发生器由非UI线程驱动的话订阅这些消息的程序需要处处小心自己的部分逻辑是否需要在UI上执行,如果这个发生器由UI线程驱动的话订阅这些事件的程序也要处处小心自己的逻辑是否会耗时超过50毫秒。
原文地址:https://www.cnblogs.com/ntminer/p/11031506.html
时间: 2024-10-26 16:50:43