Seqüência de execução Init() e DeInit() - página 3

 
Aleksei Radchenko:


Tente atualizar o terminal para a versão 1065. As versões anteriores tiveram um erro de reinicialização apenas pela mudança do cronograma. Pode ajudar :)

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


Eu tenho terminal 5.00 b1571
 
Você pode salvar os valores das variáveis em algum lugar, em globais, por exemplo. após a retradução, você pode ler e restaurar as variáveis.
 
Andrey Dik:
Você pode salvar valores de variáveis em algum lugar, em globais, por exemplo. Depois de traduzi-los, você pode ler e restaurar as variáveis.


E então a Deinit terminará seu trabalho e estragará tudo. Não faz sentido, no Init e no Deinit normais, fazer seu próprio Init e Deinit personalizados.

Eu também já encontrei este problema. (

 
Sergey Chalyshev:


E então a Deinit terminará seu trabalho e arruinará tudo. Não faz sentido no Init e no Deinit regulares se você faz seu próprio Init e Deinit personalizados.

Eu também já encontrei este problema. (


Concordo plenamente (Não faz sentido no Init e no Deinit normais)
 
Vasiliy Pushkaryov:


Talvez tente atribuir aos objetos gráficos um período TF como parte do prefixo de seu nome,

e depois aplicar algo como isto:


Obrigado pela resposta

Sim, tinha que fazer algo assim, mas é uma solução parcial.

Você pode fazer o mesmo com variáveis através de um recurso ou arquivos, mas este é um recurso adicional separado, que poderia ter sido evitado com a fixação do MT5

Desorganização do código com funções laterais extras, verificações, etc. (SEM....)

 

Sempre pensei (acontece em vão), que quando mudo de TF, primeiro deito na antiga TF e depois inicio na nova TF. Este é um curso lógico de eventos. Confiei nesta lógica ao desenvolver Conselheiros Especializados e indicadores. E agora se revela um verdadeiro disparate com eventos que interrompem a seqüência de eventos...
Às vezes eu notei algo errado com gráficos e objetos gráficos e tive que trocar os TFs várias vezes para vê-los corretamente.


Agora são os códigos onde algo nos deinites muda e depois os deinites também mudam de volta... e acontece que a seqüência é vice versa!!! Isso é simplesmente uma lógica horrível. Quem inventou isto?

A primeira coisa que me vem à mente é que no meu deinit o estado anterior (botões pressionados/liberados) é armazenado nas variáveis globais e depois os botões são definidos de acordo com os valores salvos nos inits. E são os botões que nem sempre são reajustados corretamente. Esta é a primeira coisa que me lembrei, talvez eu encontre outra coisa... estará cavando por aí amanhã.


Graças aos desenvolvedores, eles colocaram muito trabalho...

 

Em Deinit, escreva todos os dados para os globais. Definir um dos Globais como semáforo viaGlobalVariableSetOnCondition.

Na Init escreva que se o semáforo estiver em estado de "despejo de dados", leremos e trabalharemos ajustando o semáforo para estado de "ler tudo".

Se o semáforo for "ininteligível", então, basta esperar pelo semáforo (seja através de um looped Sleep ou OnTimer).


Se não houver nenhum semáforo, significa que começamos pela primeira vez e contamos tudo e ao mesmo tempo criamos um semáforo para a mudança não-futuro do TF.


O que há de tão complicado em uma implementação desse tipo? Para prescrever uma vez com uma biblioteca e pronto.

 
fxsaber:

Em Deinit, escreva todos os dados para os globais. Definir um dos Globais como semáforo viaGlobalVariableSetOnCondition.

Na Init escreva que se o semáforo estiver em estado de "despejo de dados", leremos e trabalharemos ajustando o semáforo para o estado de "ler tudo".

Se o semáforo for "ilegível", então, basta esperar o retorno do semáforo (seja através de loops Sleep ou OnTimer).


O que há de tão complicado em uma implementação desse tipo? Para escrevê-lo uma vez na biblioteca e pronto.

Eu não sabia que tal problema existia. Eu esperava a seqüência deinit-init e não o contrário. Quando você conhece os problemas, você pode resolvê-los. Mas parece-me que deve ser resolvido no nível da lógica terminal e não com muletas, que agora se tem que colocar em cada programa...
 
elibrarius:
Eu não sabia que havia tal problema. Eu esperava uma seqüência de deiniti-init e não o contrário. Quando você conhece os problemas, você pode resolvê-los. Mas me parece que deve ser resolvido no nível da lógica terminal e não com muletas, que devem ser inseridas em todos os programas agora...
Não é uma muleta, é uma solução simples. A questão é quem a implementa - desenvolvedores ou usuários. Em ambos os casos, você deve gastar tempo e escrevê-lo uma vez. Se os usuários podem fazer isso, nós o escrevemos e não nos preocupamos mais em discutir a questão. Eu mesmo acabei de ler o fio e uma solução me veio imediatamente à mente. O que há para pore over? Você pode exigir algo por muito tempo, ou você mesmo pode escrevê-lo rapidamente.
 
fxsaber:
Isto não é uma muleta, mas uma solução simples. A única questão é quem a implementa - os desenvolvedores ou os usuários. Em ambos os casos, você tem que gastar tempo e escrevê-lo uma vez. Se os usuários podem fazer isso, nós o escrevemos e não nos preocupamos mais em discutir a questão. Eu mesmo acabei de ler o fio e uma solução me veio imediatamente à mente. O que há para pore over? Você pode exigir algo por muito tempo, ou você mesmo pode escrevê-lo rapidamente.
Se você multiplicar o número de pessoas pequenas, que - cada uma por si, uma e outra vez - resolverá um problema comum, então o desperdício de horas-homem muitas vezes (no limite, um número infinito de vezes ;-)) excederá o tempo necessário para qualquer variante de edição no próprio terminal. Mesmo a presença de uma hipotética biblioteca não garante que todos estarão cientes de sua existência e da necessidade de utilizá-la. Em geral, não está claro por que fazer e deixar tal "ancinho"?
Razão: