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

 
Aleksei Radchenko:


尝试将终端更新到1065版本。以前的版本仅仅通过改变时间框架就会出现重新初始化的错误。可能会有帮助 :)

https://www.mql5.com/ru/forum/187690


我有终端5.00 b1571
 
你可以把变量值保存在某个地方,比如在globals中。在重新翻译之后,你可以读取并恢复这些变量。
 
Andrey Dik:
你可以把变量值保存在某个地方,比如说保存在globals中。 在你翻译完它们之后,你可以读取并恢复这些变量。


然后Deinit将完成它的工作,破坏一切。如果要做你自己的自定义Init和Deinit,常规的Init和Deinit是没有意义的。

我也遇到过这个问题。(

 
Sergey Chalyshev:


然后Deinit会完成它的工作,毁掉一切。如果你做自己的自定义Init和Deinit,常规的Init和Deinit就没有意义了。

我也遇到过这个问题。(


我完全同意(常规的Init和Deinit没有意义)。
 
Vasiliy Pushkaryov:


也许可以尝试给图形对象分配一个TF期作为其名称前缀的一部分。

然后应用这样的东西。


谢谢你的答复

是的,不得不做这样的事情,但这是一个部分解决方案。

你可以通过资源或文件对变量进行同样的处理,但这是一个单独的额外资源,这可以通过修复MT5来避免的

用不必要的辅助函数、检查等使代码杂乱无章。(WITHOUT....)

 

我一直认为(结果是徒劳的),当我改变TF时,我首先在旧TF上删除,然后在新的TF上启动。这是一个合乎逻辑的过程。 我在开发专家顾问和指标时依靠的就是这种逻辑。而现在,它变成了一个真正的无稽之谈,事件的顺序被打断了......。
有时我注意到图表和图形对象有些不对劲,我不得不多次切换TF,以查看所有东西是否显示正确。


现在是代码,其中deinites中的一些东西发生了变化,然后inites也变回来了......结果发现顺序是相反的!!!。这实在是可怕的逻辑。这是谁想出来的?

我想到的第一件事是,在我的deinit中,以前的状态(按下/释放的按钮)被存储在全局变量中,然后根据inits中保存的值来设置按钮。而就是这些按钮并不总是能正确复位。这是我记得的第一件事,也许我还能找到别的东西......明天将四处挖掘。


感谢开发者,他们付出了大量的工作...

 

在Deinit中,将所有数据写入globals中。通过GlobalVariableSetOnCondition 将其中一个globals设置为信号。

在Init中,如果semaphore的状态是 "dumped data",那么通过将semaphore设置为 "read all "来读取和工作。

如果信号灯是 "不可理解的",那么我们就等待信号灯(通过一个循环的Sleep或OnTimer)。


如果完全没有信号,这意味着我们第一次启动并计算一切,同时为TF的非未来变化创建一个信号。


这样的实施有什么好复杂的?要用图书馆开一次药,就这样了。

 
fxsaber:

在Deinit中,将所有数据写入globals中。通过GlobalVariableSetOnCondition 将其中一个globals设置为信号。

在Init中,如果信号灯处于 "dumped "状态,我们将通过将信号灯设置为 "read all "状态来读取和工作。

如果信号灯是 "不可读 "的,那么我们就等待信号灯的返回(通过循环Sleep或OnTimer)。


这样的实施有什么好复杂的?要在图书馆里写一次,就这样了。

我不知道有这样一个问题存在。我希望的是deinit-init序列,而不是反过来。当你知道这些问题时,你就可能解决它们。但在我看来,这应该在终端逻辑层面上解决,而不是用拐杖,现在人们不得不把它放在每个程序中......
 
elibrarius:
我根本不知道有这样一个问题。我希望能有一个脱胎换骨的序列,而不是反过来。当你知道这些问题时,你就可以解决它们。但在我看来,这应该在终端逻辑层面上解决,而不是用拐杖,现在应该在每个程序中插入拐杖......
这不是一个拐杖,这是一个简单的解决方案。问题是谁来实现它--开发者或用户。在这两种情况下,你应该花时间,写一次。如果用户能做到这一点,我们就写了它,不必再讨论这个问题了。我自己刚刚看了这个主题,马上就想到了一个解决方案。有什么值得深究的呢?你可以要求很长时间的东西,或者你可以自己快速写。
 
fxsaber:
这不是一个拐杖,而是一个简单的解决方案。唯一的问题是谁来实现它--开发者还是用户。在这两种情况下,你必须花时间,写一次。如果用户能做到这一点,我们就写了它,不必再讨论这个问题了。我自己刚刚看了这个主题,马上就想到了一个解决方案。有什么值得深究的呢?你可以要求很长时间的东西,或者你可以自己快速写。
如果你把小人物的数量相乘,他们--每个人自己,一次又一次--将解决一个共同的问题,那么浪费的工时将多次(在极限情况下,是无限次;-))超过在终端本身进行任何变体编辑所需的时间。即使有一个假想的图书馆存在,也不能保证每个人都知道它的存在并需要使用它。一般来说,不清楚为什么要制作和留下这样的 "耙子"?
原因: