aqui está a segunda opção
Acontece que as variáveis apontam para o mesmo local de memória após a primeira atribuição
if(firsttime) { backup = StringVal;
Eu gostaria de saber de onde vem esta construção
aqui está um exemplo
extern string StringVal = "string"; string backup = ""; bool firsttime = true; int init() { Print("========================="); Print("StringVal=",StringVal," backup=",backup); if(StringVal != backup){ if(firsttime) { backup = StringVal; Print(" First Call ===> backup = StringVal"); } Print("StringVal=",StringVal,"< > backup=",backup); } firsttime = false; } int start() { }
se eu compilar como um especialista
então quando eu mudo o StringVal, o backup muda imediatamente
e a última impressão não é chamada
Onde está o problema?
Bem, você muda manualmente o StringVal e o init funciona imediatamente, é isso mesmo ...
é claro que o init() funciona
O problema é que 2. a variável está sendo atualizada independentemente de outras condições
não há condição de atualização - mas a atualização acontece!
Sim, está tudo claro
O problema é que 2. a variável é definida independentemente de outras condições
SEMPRE
GRAVE PROBLEMA
aqui está um exemplo semelhante
o valor da primeira variável é passado para a segunda variável apenas uma vez e o valor da segunda variável não deve mudar na execução posterior do programa
mas toda vez que a primeira variável é alterada, o valor da segunda variável muda, o que não deve ser
extern string Value = "O"; string temp_=""; bool firsttime=true; int start() { string txt=StringConcatenate( " Value: ",Value,"\n", " temp_: ",temp_,"\n", " firsttime: ",firsttime); if(firsttime) { temp_=Value; firsttime=false; } // значение присваевается тольо ОДИН раз Print(txt); Comment(txt); }
aqui está um exemplo semelhante
o valor da primeira variável é passado para a segunda variável apenas uma vez e o valor da segunda variável não deve mudar na execução posterior do programa
mas toda vez que a primeira variável é alterada, o valor da segunda variável muda, o que não deve ser
Quando a variável externa é alterada, a EA é reiniciada, o que leva à inicialização das variáveis, declaradas em nível global. Isto é correto. Se você quiser evitar isso, use as Variáveis Globais.
errado - nenhuma inicialização
aqui está uma prova da ajuda
As variáveis globais são inicializadas apenas uma vez, logo após o programa ser carregado na memória do terminal do cliente.
e, em geral, não se trata de inicialização, mas de mudança variável
Por favor, leia o código cuidadosamente
E o problema ocorre apenas com variáveis do tipo string
Com outros tipos não há problema!
aqui está a segunda opção
Acontece que as variáveis apontam para o mesmo local de memória após a primeira atribuição
Eu gostaria de saber de onde vem esta construção
Aqui está um exemplo
você sempre tem o StringVal != backup e a primeira vez será sempre verdadeiro porque ele (init) é iniciado apenas uma vez , mas toda vez que você reinicia o EA e um novo é iniciado quando você muda a janela de informações ou quando você muda o set no início do terminal . Assim, quando você muda oStringVal, você começa o init novamente.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
se eu compilar como um especialista
então quando eu mudo o StringVal, o backup muda imediatamente
e a última impressão não é chamada
Onde está o problema?