Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 同时在多台计算机上执行服务_C#_Multithreading_Service - Fatal编程技术网

C# 同时在多台计算机上执行服务

C# 同时在多台计算机上执行服务,c#,multithreading,service,C#,Multithreading,Service,我正在为远程监控应用程序创建一个项目,该项目由托管在各个机器上的服务组成。该服务的工作是使用WMI收集有关CPU使用情况、内存使用情况等的信息。该服务使用线程每隔15秒执行一次扫描。现在我希望每台机器上的服务都能在完全相同的时间执行。例如8.15、8.30、8.45。我已经编写了一个简单的logix,它检查当前的秒数,并使线程在系统到达正好位于x.15、x.30、x.45等的时间时休眠。 但是,实现这一点本身并不能确保服务通过WMI为同一进程收集的值将同时存在。例如,应同时收集机器1和机器2的C

我正在为远程监控应用程序创建一个项目,该项目由托管在各个机器上的服务组成。该服务的工作是使用WMI收集有关CPU使用情况、内存使用情况等的信息。该服务使用线程每隔15秒执行一次扫描。现在我希望每台机器上的服务都能在完全相同的时间执行。例如8.15、8.30、8.45。我已经编写了一个简单的logix,它检查当前的秒数,并使线程在系统到达正好位于x.15、x.30、x.45等的时间时休眠。 但是,实现这一点本身并不能确保服务通过WMI为同一进程收集的值将同时存在。例如,应同时收集机器1和机器2的CPU使用情况,以便在运行时进行比较。其他过程和度量值也是如此

如果有任何帮助,我们将不胜感激。

您对“完全相同的时间”的容忍度是多少?10毫秒

如果您的系统位于同一LAN上,并且网络延迟较小,则可以使用设置TCP/IP发布-订阅系统,以每15秒触发一次脉冲,从而使所有系统都拍摄快照

如果系统分布广泛,则可以使用类似以下内容来查询NTP服务器:
谢谢你的帮助,事实上我已经成功了。这里应用的逻辑(由我妻子提出)。我有一个静态集合,有2-3个不同的线程运行,每个线程使用WMI查询从机器检索不同的值集。现在,此数据收集每1秒(此时)进行一次,并插入到静态收集中。现在有另一个线程从集合中获取在时间为15的倍数插入的记录。例如,第二个%15=0。现在这就解决了问题。从集合中收集记录后,我将删除在当前时间之前从集合中收集的所有记录。我不确定这是否是最好的解决方案,但对我来说是可行的。

在多台机器上同步时钟是一个棘手的问题。大多数包含时间元素(例如防止重播攻击)的协议都会允许相关机器报告的时间延迟,这是有原因的。实际上,我实现的逻辑为我提供了所需的输出,但解决方案不可靠。这个解决方案的前提是一切正常-(参见示例):“Microsoft不保证其实现的准确性超过2秒”