错误、漏洞、问题 - 页 2976

 
Nikolai Semko:
你说的是哪个缺点?
关于资源强度?
那是一个误导性的声明。
评论 消耗了同样多的资源。
它需要1-3毫秒的时间来生成和显示整个窗口的文字画布。
在MT5中,注释的输出时间稍长。如果你要每秒更新30次文本信息,你就不会看到任何滞后。

我没有详细调查过为什么Kanvas可能很慢,但我认为是出于同样的原因......数组中的像素不能被有选择地改变,也不能给出重绘命令。你先对数组进行修改,然后你必须进行资源创建。它逐一复制像素,然后,类似地,逐一绘制出图表,然后再更新图表(ChartRedraw)。有多少不必要的操作...这在任何情况下都会在处理器忙于处理有用的数据时杀死它的负载。而标签至少占用较少的像素(因此输出速度更快)。然后,他们的输出机制完全在图表内(不需要传递一个数组)。虽然我不完全确定 他们的算法,但我认为他们更快。我曾经在画布的基础上制作过一个文本输出面板。当在测试器中用这样的面板直观地测试专家顾问时,我对结果没有留下什么印象。除了EA自身的负荷外,面板的重绘也相当烦人。面板在每一个刻度上不断地被更新(ResourceCreate -ChartRedraw)。虽然我没有注意到标签的这种减速现象。

 

要么我是个傻瓜,要么滑雪板没有动静? MT4 build 1320

double LotStep = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
double Lot=0.7;
PrintFormat("LotStep %f, lot %f, %f, %f %f",LotStep,Lot,Lot/LotStep,MathFloor(Lot/LotStep),(int)double(Lot/LotStep));
//Print
//2021.03.07 23:42:46.507	2021.02.25 07:36:40  EA_CCIcross_v1.0 AUDJPY,M5: LotStep 0.010000, lot 0.070000, 7.000000, 6.000000 6.000000

p/s/ 我理解7是6.9999,但为什么0.7除以0.1打印输出为7.000,而不是6.9999,令人误解。
 
Mihail Matkovskij:

我还没有详细研究过为什么Kanvas可能很慢,但我想这是出于同样的原因......数组中的像素不能被有选择地改变并给出重绘命令。你先对数组进行修改,然后你必须进行资源创建。它逐一复制像素,然后,类似地,逐一绘制出图表,然后再更新图表(ChartRedraw)。有多少不必要的操作...这在任何情况下都会在处理器忙于处理有用的数据时杀死它的负载。而标签至少占用较少的像素(因此输出速度更快)。然后,他们的输出机制完全在图表内(不需要传递一个数组)。虽然我不完全确定 他们的算法,但我认为他们更快。我曾经在画布的基础上制作过一个文本输出面板。当在测试器中用这样的面板直观地测试专家顾问时,我对结果没有留下什么印象。除了EA自身的负荷外,面板的重绘也相当烦人。面板在每一个刻度上不断地被更新(ResourceCreate -ChartRedraw)。同时,我从来没有注意到标签的这种减速。

这只是你的想象力。
当然没有什么是免费的,但kanvas是MT5中显示文本的最快方式,因为kanvas是一个基础,评论和标签对kanvas来说是次要的。
如果你如此贪恋你的CPU资源,请使用unprinters...
 
Mihail Matkovskij :

我还没有详细研究过为什么Kanvas可能很慢,但我想这是出于同样的原因......数组中的像素不能被有选择地改变并给出重绘命令。你先对数组进行修改,然后你必须进行资源创建。它逐一复制像素,然后,类似地,逐一绘制出图表,然后再更新图表(ChartRedraw)。有多少不必要的操作...这在任何情况下都会在处理器忙于处理有用的数据时杀死它的负载。而标签至少占用较少的像素(因此输出速度更快)。然后,他们的输出机制完全在图表内部(不需要传递一个数组)。虽然我不完全确定 他们的算法,但我认为他们更快。我曾经在画布的基础上制作过一个文本输出面板。当在测试器中用这样的面板对EA进行视觉测试时,我对结果没有留下什么印象。除了EA自身的负荷外,面板的重绘也相当烦人。在每个刻度上都有一个持续的更新(ResourceCreate -ChartRedraw)。我没有注意到标签的这种减速现象。

请不要谈论你不知道的事情。@Nikolai Semko 说得很对,Canvas运行得很快,没有任何问题和缺陷。
 

@Ilyas

编译器错误?建2817。

   const ushort AN_USHORT_CONSTANT = 1;
//---
   ushort avariable = 1;

   switch(avariable)
     {
      case AN_USHORT_CONSTANT :
         Print("Compiler bug ?");
         break;
     }


 
Nikolai Semko:
这只是在你看来。
显然,没有什么是免费的,但kanvas是MT5中显示文本的最快方式,因为kanvas是基础,而评论和标签是kanvas的次要内容。
如果你对你的CPU资源如此贪婪的话,就使用引子吧...

如果canva本身是OBJ_BITMAP_LABEL的插件,而标签是OBJ_LABEL,你怎么知道标签是基于canva的?

当我在论坛上聊天时,我已经在标签上画出了输出面板的草图,有任何指定数量的行和列。而对于画布,我还有其他的任务,在我的其他应用程序中。而且它在那里也非常好用。

Alain Verleyen:
请不要谈论你不知道的事情。@Nikolai Semko 说得很对,Canvas工作起来很快,没有任何问题和缺陷。

所以你可能什么都知道?那么,也许可以分享你的知识或链接,在那里你可以读到关于MetaTrader的图表,所以我也知道你知道什么?:)

 
Alain Verleyen:

@Ilyas

编译器错误?建2817。

在MQL中,const根本就不是const。事实上,const只能通过一个宏来编写

//const ushort AN_USHORT_CONSTANT      = 1; //(*)
#define         AN_USHORT_CONSTANT ushort(1) //(**)
void main()
{
        int i[AN_USHORT_CONSTANT];      //(1) нормально
        ushort avariable = 1;
        switch(avariable) {
        case AN_USHORT_CONSTANT:        //(2) нормально
                break;
        }
}
void f( int = AN_USHORT_CONSTANT ) {}   //(3) нормально
enum { e = AN_USHORT_CONSTANT };        //(4) нормально    
 
A100 :

在MQL中,const根本就不是const。事实上const只能通过一个宏来编写

这是个错误 :-D
 
Alain Verleyen:
是的,所以这是一个错误 :-D

请注意,这不是在一种情况下,而是在所有(1)(2)(3)(4)中都是这样设计的:用(*)会出现错误,但用(**)就可以了。也就是说,常量作为一个实体缺失了

 
A100 :

请注意,这不是在一种情况下,而是在所有(1)(2)(3)(4)中都是这样设计的:用(*)会出现错误,但用(**)就可以了。也就是说,常量作为一个实体缺失了

我知道。这就是为什么我要求开发人员修复它。