Erros, bugs, perguntas - página 2555

 
TheXpert:
adicionar FILE_SHARE_READ para cabo de escrita e FILE_SHARE_WRITE para cabo de leitura

Não funciona, apenas individualmente se estiver pendurado na tabela. Usado:

handle_write=FileOpen("checkbox_color.txt",FILE_WRITE|FILE_SHARE_READ|FILE_TXT,';');
handle_read=FileOpen("checkbox_color.txt",FILE_READ|FILE_SHARE_WRITE|FILE_TXT,';');
 
Влад:

Não funciona, apenas individualmente se estiver pendurado na tabela. Usado:

Tudo resolvido.Usado:

handle_write=FileOpen("checkbox_color.txt",FILE_READ|FILE_WRITE|FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_TXT,';');
handle_read=FileOpen("checkbox_color.txt",FILE_READ|FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_TXT,';');
 
Surgiu uma nova questão. No primeiro gráfico estou a alterar a variável graças ao indicador acima mencionado. No segundo gráfico, a informação só é exibida quando a TF muda, não instantaneamente como eu gostaria. Como pode ser resolvido? A simples actualização do gráfico pressionando PCM não ajuda.
 

build 2135 está de todo quebrado

#define abort(ANY) do{printf("abort, file=%s,  line=%i", __FILE__, __LINE__); Alert(1/(uint)MathAbs(0));}while(false)

#define  GENERATE_VECTOR_GROWTH_FACTOR 2
#define  GENERATE_VECTOR(NAME, REF)                                         \
   template <typename T>                                                   \
   class NAME                                                              \
   {                                                                       \
      uint sz;                                                             \
   public:                                                                 \
      T a[];                                                               \
      NAME(): sz(0) {}                                                     \
      NAME(uint count): sz(0) {                                            \
         if (ArrayResize(this.a, count) == -1)                             \
            abort(0);                                                      \
         this.sz = count;                                                  \
      }                                                                    \
      uint size()const           {return this.sz;}                         \
      void clear()               {this.sz = 0;}                            \
      void push_back(T REF value) {                                        \
         if (this.sz == ArraySize(this.a)  &&                              \
             ArrayResize(this.a, this.sz*                                  \
                           GENERATE_VECTOR_GROWTH_FACTOR+1) == -1)         \
            abort(0);                                                      \
         this.a[this.sz++] = value;                                        \
      }                                                                    \
      void reserve(uint new_cap) {                                         \
         if ((int)new_cap > ArraySize(this.a))                             \
            ArrayResize(this.a, new_cap);                                  \
      }                                                                    \
      void erase(uint pos) {                                               \
         if ( ! ArrayRemove(this.a, (int)pos, 1) )                         \
            abort(0);                                                      \
         -- this.sz;                                                       \
      }                                                                    \
   };
#define  GENERATE_VECTOR_EMPTY
GENERATE_VECTOR(vector_fund, GENERATE_VECTOR_EMPTY);
GENERATE_VECTOR(vector_ref, const &);
#undef  GENERATE_VECTOR_EMPTY
#undef  GENERATE_VECTOR_GROWTH_FACTOR
#undef  GENERATE_VECTOR

'GENERATE_VECTOR' - unexpected token, probably type is missing?    1_mystd.mqh    74    1

'GENERATE_VECTOR' - ficha inesperada, provavelmente falta o tipo? 1_mystd.mqh 75 1

'GENERATE_VECTOR' - variável já definida 1_mystd.mqh 75 1

Compilado há séculos, quebrado na nova construção.

 
Vict:

build 2135 está quebrado.

Tem vindo a compilar há séculos, está partido na nova construção.

Eu faço batota, tudo bem, um dos abortos foi chamado sob a forma de
abort();

costumava comer o compilador, mas na nova construção recusou, devem ter afinado alguma coisa (bem, não creio que tenha apagado acidentalmente um zero).

 
Notei que o ME carrega 2 núcleos (26%) do CPU ao compilar, surge a questão - é multithreading, então porque não seriam todos os núcleos utilizados para a compilação ou é um erro sob a forma de desperdício de recursos?
 
Vict:
Trapaça, tudo bem, em um dos abortos foi chamado como

O compilador costumava comê-lo, mas na nova construção recusou, por isso devem ter afinado algo (bem, é pouco provável que eu tenha apagado acidentalmente um zero).

A propósito, devemos pedir aos criadores que introduzam um aborto a tempo inteiro, afirmar ... O ideal, é claro, e excepções. Mas pelo menos começar pequeno.
 
Alexey Navoykov:
A propósito, devemos pedir aos criadores que introduzam um aborto em linha, abortar ... e idealmente, claro, excepções. Mas pelo menos começar com algo pequeno.

Numa palavra, se não me engano, pedi isso no meu último ciclo MQL, já passaram 4 anos, mas tive de ouvir um hullabaloo de pessoas letradas, que disseram que não precisavam, basta escrever desta forma... Se quiser parar aexecução do programa com um erro crítico de acesso aos dados ou indicador OHLC... olhei através de metade da kodobase, sim, alguns co-escritores verificam estas condições, mas o processamento está ausente, o máximo que vejo é a saída no diário de bordo do perito, como aconteceu um problema, não se preocupe, vou continuar a trabalhar com dados inválidos neste carrapato ))))

SZY: Estou dorido, preciso de uma maneira simples de parar de processar o tick actual! - para parar o trabalho do perito, é possível, mas para parar o processamento de uma carraça, inventar e trabalhar - suspeito que a nível do compilador abort() não é mais difícil do que ExpertRemove() - que já existe

ZZZY: a tarefa de escrever um EA em MQL sem abort() em estilo processual é mais como uma invenção do que na montagem de um código a partir de sub-rotinas prontas. Suspeito que estas constantes discussões sobre como escrever um indicador que possa tratar correctamente a história para outra TF será também mais fácil de resolver usando abort() - Ainda não decidi sobre este assunto

 
Igor Makanu:

Ponha uma boa palavra, se não me engano, pedi isso há 4 anos atrás no meu último ciclo de MQL. bem, tudo é como de costume

Tem razão, quando começa a dizer isso, essas pessoas alfabetizadas sairão de todos os buracos, dizendo "isto não é C++").

precisa de uma maneira simples de parar de processar o tick actual! - significa que é possível parar o trabalho da EA, mas para parar o processamento de um tick é necessário inventá-lo e resolvê-lo - suspeito que ao nível do compilador abort() não pode ser implementado mais complicado do que o ExpertRemove() - que já existe

Bem, ambos abortam e afirmam são implementados da mesma forma que no código acima. Embora seja certamente feio e por vezes confuso, porque nem sempre reparo na mensagem anterior no registo. Talvez haja algum outro erro, que devolva algo como "erro interno" no registo? Pelo menos não pareceria tão embaraçoso )

 
Alexey Navoykov:

Tem razão, quando começa a dizer isso, essas pessoas alfabetizadas sairão de todos os buracos, dizendo "isto não é C++").

Bem, ambos abortam e afirmam são implementados da mesma forma que no código acima. Embora seja certamente feio e por vezes confuso, porque nem sempre reparo na mensagem anterior no registo. Talvez haja algum outro erro, que devolva algo como "erro interno" no registo? Pelo menos não pareceria tão embaraçoso )

aqui@Vict ajudou-me a abrir uma excepção com a saída para OS via substituição de macroshttps://www.mql5.com/ru/forum/318246/page10#comment_12651045

, uma solução globalmente exequível, mas... mas parece feio e nojento! )))