Init()和DeInit()执行顺序 - 页 24

 
fxsaber:
你重做的例子并不完全适合手头的问题。你可以展示另一个例子,它不会有通过UninitializeReason的解决方案。

就这样吧,我要结束这次对话。讨论抓耳挠腮的方法有什么意义呢?如果没有其他解决方案,你可以使用你的代码,但普遍性并不总是理想的解决方案。

例如,为了砍掉1个覆盆子灌木,没有人会想到叫来一个伐木工人。因此,你的代码相当于一个伐木工人团队去砍伐一个覆盆子树丛。

问候阿列克谢。

 
我不明白,如果旧的DeInit和新的OnInit是在不同的线程中执行的,那么OnInit只是在等待DeInit发生和完成,这有什么问题?使用全局变量 作为信号。
 
Aleksei Radchenko:
我不明白,如果旧的DeInit和新的OnInit是在不同的线程中执行的,那么OnInit只是在等待DeInit发生和完成,这有什么问题?使用全局变量 作为信号。
在一个单一的图表上,所有的指标只在一个线程上运行。
 
Alexey Viktorov:

使用一个原始的两位数的例子有什么意义?

用一个几乎正确的代码的例子来代替。

阿列克谢,这个例子是为了让一个失败者也能理解它。这就是为什么我写道,它是原始的。对不起,这不是为全优生设计的。

今天早上看到一只小狗对着过往的卡车狂吠。她送来了她的爱。

 
Nikolai Semko:

阿列克谢,这个例子是为了让成绩不好的人也能理解它而创造的。这就是为什么我写道,它是原始的。对不起,这不是为全优生设计的。

今天早上看到一只狗对过往的卡车狂吠。她送来了她的爱。

你和她一起吠叫吗?

在创建之前没有检查对象的存在,从这个例子可以理解什么?对开发者的索赔,他们没有使其以任何方式写,有严重的错误?我想怎么写就怎么写,开发商必须为我提供一切条件。开发人员必须为我将来可能犯的所有错误提供资金。是这样吗?不要从不存在的地方吸出问题。

 
Alexey Viktorov:

在创建对象之前没有对其进行检查,从这个例子中可以理解什么?对开发者提出 索赔,说他们没有让人随心所欲地写,有严重的错误?


阿列克谢,你似乎完全不在状态。请阅读原始资料
这里有一句话。"如果一个对象以前被创建过,就会尝试改变其 坐标。"

我明白,在大型作品中,把各种检查放在一起是很好的形式。但在这种情况下,这种检查是没有意义的。因为如果没有对象,ObjectCreate将创建它,如果有,它将简单地改变其坐标。在这个非常原始的例子中,目标是通过Deunit的旧TF来展示删除一个对象的事实,它完美地展示了这一点。
你的 "肇事逃逸 "无关紧要。最有可能的是试图吸引人们对自己的注意。
如果你想要多余的代码行,没有任何意义,以训练你的手指,我推荐一个优秀的资源 "键盘独奏"

 
Alexey Viktorov:

你和她一起跳下去了吗?

在创建对象之前没有对其进行检查的例子中,你能理解什么?对开发者的索赔,说他们没有让你想写什么就写什么的粗制滥造的错误?我想怎么写就怎么写,开发商必须为我提供一切条件。开发人员必须为我将来可能犯的所有错误提供资金。是这样吗?不要从不存在的地方吸出问题。


试图创建一个现有对象有什么可怕的?它会消失吗?
 
Dmitry Fedoseev:

如果我们试图创建一个现有的对象,会发生什么可怕的事情?它会消失吗?

迪米特里,在我看来,你是一个受过教育的程序员。你没有被教导过编程中的礼节规则吗?

其余的你可以像在老的mql4中那样写,有可能出现数组 超限和其他假设。你得到一个错误的回应...好吧,把旗子插回去...我们继续吧,我们没有时间了......然后我们遇到了一个在更严格的语言中不值一提的问题,开始向开发者抱怨......

基督已经复活了。

 
Nikolai Semko:


...这个非常原始的例子的目的是为了说明德尼特删除了旧TF的对象,它完美地证明了这个事实。

失败的事实显示在反面的例子中。你不必把问题从不存在的地方吸出来。在去初始化的原因 上加一个检查,对象没有被删除,只是改变了它的坐标。
 
Alexey Viktorov:
失败的事实显示在响应的例子中。没有必要将问题从不存在的地方吸出来。你检查一下去初始化的原因,对象并没有被删除,只是改变了它的坐标。
//Часть твоего кода:
void OnDeinit(const int reason)
  {
   if(UninitializeReason() != REASON_CHARTCHANGE)      // Что ты здесь сделал? - ЕСЛИ ПРОИСХОДИТ СМЕНА ТФ, ТО НИЧЕГО НЕ ДЕЛАЕМ. Бред! 
                                                       // И зачем здесь использовать функцию UninitializeReason(), когда можно уже существует переменная  reason?
    {
     ObjectDelete(0,"InitDeinit");
     ChartRedraw(0);                                   // Не нужная функция в данном случае, т.к. она обычно применяется после изменении свойств объктов. Объект удалится и так. 
     Print(__FUNCTION__, "  InitDeinit удалён");       // А где ж твоя любимая проверка, вдруг не удален.
    }
  }

我的例子是为了说明新TF的单位和旧TF的单位顺序不明确的问题,而不是作为一种解决方案。

你只是绕过了这个问题,而不是解决了这个问题。
在我的例子中,重要的是在旧TF的单元中,该对象在任何情况下都被删除,包括当TF被改变时,而在新对象的单元中,它被重新创建。

如果该序列首先是旧TF的Deunit,然后是新TF的Unit,在逻辑上应该是这样。然后,该对象被删除,然后再次创建。

如果序列首先是新TF的Unit,然后是旧TF的Deunit,那么当你试图在Unit中创建该对象时,该对象只是被修改,因为它还没有被删除。然后它被旧TF的Deunit删除。这是个错误。

这就是这个例子的重点--展示任何没有读过这个分支、不知道这个 "特性 "的程序员可能遇到的情况。
这个例子并不意味着是一个解决方案。这里这里 介绍的是解决方案的变体。我想我以后也会添加一个解决方案,但不使用终端的全局变量和文件,而且即使在一个窗口中设置了几个相同的指标,这个解决方案也能发挥作用。你是否尝试过解决这个问题?或者你只能够在别人的代码中找到错误,特别是在他们不存在的时候。

不要再犯傻了!