gpt4 book ai didi

c# - 如何在每秒的顶部运行计时器? (当毫秒 = 000 时)

转载 作者:行者123 更新时间:2023-11-30 12:51:08 25 4
gpt4 key购买 nike

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

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

我的输出如下:

10:28:32.87510:28:33.39010:28:34.875....10:28:39.53010:28:40.875

但是,我想要以下结果:

10:28:32.00010:28:33.00010:28:34.000....10:28:39.00010:28:40.000

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

最佳答案

首先,这是不可能的。即使您要将“事件”安排在提前几毫秒触发的时间,然后将当前时间的毫秒部分与循环中的零进行比较,您的代码的流程控制也可以随时取消给定的时刻。

您将不得不稍微重新考虑您的设计,而不是依赖于事件何时触发,而是考虑将补偿延迟的毫秒数的算法。

另外,Threading.Timer 不会给你太多帮助,如果你定期使用自己的线程,你会有更好的机会:

  • 检查当前时间,看看下一整秒是几点
  • Sleep() 该数量减去“香料”因素
  • 做你必须做的工作。

您将根据获得的结果计算您的“香料”因素 - sleep 是提前还是晚于计划完成。

如果您要提供更多信息,说明您明显需要在零毫秒时发生事件,我可以帮助您摆脱该要求。

HTH

关于c# - 如何在每秒的顶部运行计时器? (当毫秒 = 000 时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7578792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com