mql5语言的特点、微妙之处以及技巧 - 页 92

 
斯拉瓦
在两次调用GetMicrosecondsCount用于测量微秒数的时间之间,本地计算机时间发生变化的概率是多少?

不是零。

 
TheXpert
非常有建设性的讨论 )

只是再有几个潦倒的人被永久删除,就这样了。

不再容忍那些急于封锁,试图把WinAPI函数的现实称为错误并指责我们的人。显然会有更多的建设性。

 
fxsaber:

不是零。

客户端/服务器交换时间损失的概率是多少,以毫秒计?可能比改变当地时间 的概率更大。

 
雷纳特-法特库林

只要再永久性地删除几个乱写乱画的人,就可以了。

不再容忍那些急于封锁的人,试图把现实说成是错误的,并指责我们。显然会有更多。

稍微偏向主题的右边,在OnTimer()的方向))。

我不记得我在哪里读到的,有一个MQ的代表写道,有可能(对于那些有强烈欲望的人)将系统切换到1ms的延迟,然后,如果你使用EventSetMillisecondTimer(...),OnTimer()也会工作,误差大约为1ms,但不是16ms。

如果我没有理解错的话,OnTimer()是用系统延迟来操作的,对吗?


ps.昨天给servcie-desk发了一个请求未处理开始时间:2018.07.30 12:52#2117844 你能帮忙处理一下吗,从昨天开始就一直挂着))
 

OnTimer与系统WinAPI定时器的错误一起工作,通过WinAPI函数GetTickCount 控制。这是一种非常快速和便宜的计时方法,对被测量的过程影响最小。这意味着它不会极大地影响最终结果。

对于整个操作系统来说,这个计时器的准确性可以得到提高,但代价是增加了CPU的消耗,以及大量程序开始的随机和大量诱发的影响。

  • 更准确地测量时间
  • 少花点时间在滑梯上
  • 一些对普通错误有效的超时,会退化成彻底的坏行为。
  • 还有一些更酷的故障

Windows系统的定时器问题已经有20多年历史了。但是,改变旧时代人的行为和准确性是很危险的。

这就是为什么新的、更精确的计时方法早已被引入。但它们是资源密集型的,用来完全替代旧计时器是不合理的。

我们用GetMicrosecondCount来实现更高精度的定时器。应该有意识地使用它,并理解它比GetTickCount花费更大。另外,在精确计量的情况下,调用GetMicrosecondCount的费用应该明确地考虑到。

滥用计时器和不保持基准的清洁,很容易欺骗自己和他人。

 
Renat Fatkhullin:

不再容忍那些急于求成的人,试图把WinAPI函数的现实称为错误并指责我们。显然会有更多的建设性。

你可以简单地在帮助中写道:GetMicrosecondsCount依赖于本地 计算机时间,当它被修改时,可能工作不充分。GetTickCount则不然。

因此,如果你需要在我们和你的层面上解决这个问题,你可能应该在我们的层面上解决。

为什么要禁止?

 
雷纳特-法特库林

OnTimer与系统WinAPI定时器的错误一起工作,通过WinAPI函数GetTickCount 控制。这是一种非常快速和便宜的计时方法,对被测量的过程影响最小。这意味着它不会极大地影响最终结果。

对于整个操作系统来说,这个计时器的准确性可以得到提高,但代价是增加了CPU的消耗,以及大量程序开始的随机和大量诱发的影响。

  • 更准确地测量时间
  • 少花点时间在滑梯上
  • 一些正常的超时工作会退化成彻底的错误行为
  • 和一些更酷的故障。

Windows系统的定时器问题已有20多年历史。但是,改变旧时代人的行为和准确性是很危险的。

这就是为什么新的、更精确的计时方法早已被引入。但它们是资源密集型的,用来完全替代旧计时器是不合理的。

我们用GetMicrosecondsCount来实现更高精度的定时器。应该有意识地使用它,并理解它比GetTickCount花费更大。此外,在精确计量的情况下,应明确考虑调用GetMicrosecondsCount的成本。

滥用计时器和没有保持基准的清洁,很容易欺骗自己和他人。

哎呀,这就是我在MQ的代表写了关于减少系统定时器时间后的想法 ))

所以我同意,没有必要在这个方向上改变什么。

顺便说一下,我想知道是否有像C#或至少像boost那样的反射 发展? 例如,序列化/反序列化的实现会更方便。

 
TheXpert:

你可以简单地在帮助中写上:GetMicrosecondsCount取决于本地计算机时间,当它被修改时可能无法充分工作。而GetTickCount并不依赖于它。

在帮助中写道:GetMicrosecondCount()函数返回微秒,自MQL5程序开始后经过 的时间。

这就是我明确说的:要测量微秒的数量。

关于微秒测量的问题也可以得到解决,尽管方式有些尴尬。

我们为什么要禁止?

我们必须禁止。

首先,微秒计时器的时间测量没有问题。第二--有些人迫不及待地想找一个借口来发飙,然后坚持到最后。

再一次--规则已经改变。

不再接受任何侮辱或 "你必须"。我们将毫无预警地进行扫荡。

 
雷纳特-法特库林

在帮助中是这样说的:GetMicrosecondCount()函数返回自MQL5程序开始以来所经过的微秒 数。

而它是为GetTickCount函数 写的。

GetTickCount()函数返回自系统启动以来所经过的毫秒数。

这两个短语几乎相同,但一个函数取决于当地时间,另一个则不取决于,我们应该如何猜测?

 
TheXpert

而它是为GetTickCount函数 写的。

这些短语几乎是相同的,但一个函数取决于当地时间,另一个则不取决于。我们怎么能猜到呢?

这就是WinAPI。

提醒大家注意明确或隐含地使用 "应该 "短语。使用 "元引号必须 "而不是 "请考虑",现在是不可接受的。