微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 如何在每秒的TOP运行计时器? (当millis = 000时)

在我的应用程序中,我使用了System.Threading.Timer的数量并将此计时器设置为每1秒触发一次.我的应用程序每1秒执行一次线程,但执行毫秒是不同的.

在我的应用程序中,我使用了OPC服务器& OPC组.一个线程从OPC服务器读取数据(比如一个变量改变它的值,我希望每隔1秒将更改值的这一刻记录到我的应用程序中)
然后另一个读取这个数据的线程从第一个线程读取这个数据每1s&第二个线程用于存储数据到MysqL数据库.
在这个过程中,当我将从第一个线程读取数据然后我将得到旧的数据值,如此读取数据在10:28:01.530这一秒然后我将获得10秒28:00.260秒的信息.所以我想管理这些线程,第一个线程工作在000毫秒&第二个线程工作在500毫秒.使用这个第一个线程更新数据在000秒&第二个线程在500毫秒读取数据.

我的输出如下:

10:28:32.875
10:28:33.390
10:28:34.875
....
10:28:39.530
10:28:40.875

但是,我想要以下结果:

10:28:32.000
10:28:33.000
10:28:34.000
....
10:28:39.000
10:28:40.000

如何设置定时器以便在“000毫秒”执行回调?

解决方法

首先,这是不可能的.即使您要将“事件”安排在一段时间之前,它们会提前几毫秒被触发,然后将当前时间的毫秒分量与循环中的零进行比较,您的代码的流量控制可能会被取消.给定的时刻.

您将不得不重新考虑您的设计,而不是取决于事件何时触发,而是考虑将补偿延迟的毫秒数的算法.

此外,你对Threading.Timer没有太多帮助,如果你定期使用你自己的线程,你将有更好的机会:

>检查当前时间,查看下一整秒的时间
> Sleep()为该数量减去’spice’因子
>做你必须做的工作.

您将根据您获得的结果计算您的’spice’因子 – 睡眠是否提前完成或落后于计划.

如果你要提供更多关于你明确需要在零毫秒时发生事件的信息,我可以帮助你摆脱这个要求.

HTH

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐