加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 21:24:07 所属栏目:百科 来源:网络整理
导读:在我的应用程序中,我使用了System.Threading.Timer的数量并将此计时器设置为每1秒触发一次.我的应用程序每1秒执行一次线程,但执行毫秒是不同的. 在我的应用程序中,我使用了OPC服务器 OPC组.一个线程从OPC服务器读取数据(比如一个变量改变它的值,我希望每隔1
在我的应用程序中,我使用了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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读