voidOnStart() { string name = "MysteryObject"; ulong begin;
begin = GetMicrosecondCount(); for(int i=0; i<1000; i++) int result = ObjectFind(0,name); printf("ObjectFind took %i μs", GetMicrosecondCount()-begin);
begin = GetMicrosecondCount(); for(int i=0; i<1000; i++) bool result = ObjectDelete(0,name); printf("ObjectDelete took %i μs", GetMicrosecondCount()-begin); }
这可能是语义问题,而不是一个错误。
ObjectDelete的目的是 "删除具有指定名称的对象"。
在运行该函数 的最后,图表上是否还有一个名为 "不存在的对象 "的对象?没有......那么这算不算成功?
换个角度看,ObjectDelete 是否删除了 一个叫做 "非存在对象 "的对象?没有......所以这是失败吗?
你是通过结果还是采取的行动来衡量成功?
如果运行该函数 后,被命名的对象仍然在图表上,也许会有一个错误的预期。否则,就是成功。
是的,我正在写。我在等待你的确认。谢谢。
刚刚尝试在服务台报告,它不接受我的信息,说 "保存数据错误"。
也从不同的地点、电脑和浏览器(使用我的VPS)尝试了一下,也发生了同样的情况。
你能在你那边报告吗?
这可能是语义问题,而不是一个错误。
ObjectDelete的目的是 "删除具有指定名称的对象"。
在运行该函数 的最后,图表上是否还有一个名为 "不存在的对象 "的对象?没有......那么这算不算成功?
换个角度看,ObjectDelete是否删除了一个叫做 "非存在对象 "的对象?没有......所以这是失败吗?
你是通过结果还是采取的行动来衡量成功?
如果运行该函数 后,被命名的对象仍然在图表上,也许会有一个错误的预期。否则,就是成功。
如果是这样的话,那么MQL4和MQL5之间的功能 差异就没有在文档中报告或解释!
我同意。我只是好奇哪一个 "他们 "会说是正确的 :-)
我个人认为,最好是返回true。否则,你需要添加额外的代码来检查对象是否存在,否则就要忍受4202的错误。
我同意。我只是好奇哪一个 "他们 "会说是正确的 :-)
我个人认为,最好是返回true。否则,你需要添加额外的代码来检查对象是否存在,否则就要忍受4202错误。
在我看来,在这两种情况下,不管哪个版本是 "正确 "的,都需要在删除前检查 对象是否存在。
编辑:然而,我希望他们能 "修复 "它,使它能以与MQL4相同的方式工作。否则就会出现另一种功能 上的差异,在这种情况下,我们需要在两个版本的代码中放置条件性编译。
在我看来,在这两种情况下,不管哪个版本是 "正确 "的,都需要在删除前检查对象是否存在。
有趣的是!如果你想让它消失,为什么还要检查 它是否存在?
检查一个不存在的对象是否存在所花的时间与在MT4上试图删除一个不存在的对象所花的时间相当(在MT5上粗略检查一下就会发现它的速度要慢得多),所以我看不出运行这个检查有什么实际的性能好处。但它会给你的代码增加更多行数。
编辑:然而,我希望他们能 "修复 "它,使它能以与MQL4相同的方式工作。否则就会出现另一种功能 上的差异,我们将需要在两个版本的代码中放置条件性编译。
有趣的是!如果你想让它消失,为什么还要检查它是否存在?
检查一个不存在的对象是否存在所花的时间与在MT4上试图删除一个不存在的对象所花的时间相当(在MT5上粗略检查一下就会发现它的速度要慢得多),所以我看不出运行这个检查有什么实际的性能好处。但它会给你的代码增加更多行数。
当你想检测用户是否不小心删除并需要重新创建的时候。我的意思是这是一般的 "内务管理",而不是为了单一的只有一次的删除功能。
但是,是的,我同意,对于一个 "OnDeinit() "功能,没有必要先测试它。
当你想检测用户是否不小心删除并需要重新创建的时候。我的意思是这是一般的 "内务管理",而不是为了单一的只删除一次的功能。
但是,是的,我同意,对于 "OnDeinit() "功能,没有必要先测试它。
啊,我明白了。
作为一个附带说明。
void OnStart()
{
string name = "MysteryObject";
ulong begin;
begin = GetMicrosecondCount();
for(int i=0; i<1000; i++) int result = ObjectFind(0,name);
printf("ObjectFind took %i μs", GetMicrosecondCount()-begin);
begin = GetMicrosecondCount();
for(int i=0; i<1000; i++) bool result = ObjectDelete(0,name);
printf("ObjectDelete took %i μs", GetMicrosecondCount()-begin);
}
在MT4上运行,里面没有什么东西。
在MT5上运行,它的速度要慢50倍以上。
有没有人知道为什么?
作为一个附带说明。
在MT4上运行,里面的内容不多。
在MT5上运行,它的速度要慢50倍以上。
有没有人知道为什么?