Erros, bugs, perguntas - página 1509

 
Дмитрий Касаткин:
Não consigo aceder à plataforma, o website diz que o terminal web não é suportado por este MetaTrader Server. Por favor contacte o seu corretor para actualizar o servidor, a plataforma diz que não há ligação?
O seu corretor não suporta terminal web. Se o terminal estiver instalado no seu computador e não houver ligação, deverá abrir a porta443 se esta tiver sido fechada antes.
 
Caros programadores, qual é a ordem da função OnDeinit - a ordem de apagar objectos e outras variáveis, limpar memória, etc.
 
coderex:
Caros programadores, qual é a ordem da operação da função OnDeinit - a ordem de eliminação de objectos e outras variáveis, limpeza de memória, etc.?

OnDeinit é uma função comum em MQL4/5 que é chamada em certas situações. É assim que se programa, e assim será.

Por favor, seja mais específico na sua pergunta. Em que está exactamente interessado?

 
Slawa:

OnDeinit é uma função comum em MQL4/5 que é chamada em certas situações. É assim que se programa, e assim será.

Por favor, seja mais específico na sua pergunta. Em que está exactamente interessado?

Com objectos que são explicitamente apagados (criados na memória atribuída), tudo é claro. O que me interessa é o processo de libertar a memória e apagar objectos criados em memória desacompanhada.

Isto é, existem, por exemplo, dois objectos e uma variável de um tipo fundamental:

class CFirst {...};
class CSecond {...};

int iVolume = 100;
CFirst first_obj;
CSecond *second_obj;

int OnInit(void) {
   second_obj = new CSecond();
// текст функции OnInit
}
void OnDeinit(const int reason) {
   if(CheckPointer(second_obj == POINTER_DYNAMIC)
      delete second_obj;
}

Estou interessado em saber qual será a ordem de libertação e eliminação de todos os objectos, quando o programa for eliminado.

 
Slawa:

...

Quando pode o terminal congelar? - Parece haver situações normais em que o terminal é suposto ser pendurado.

Pelo que vi, fica sempre pendurado (pendurado por um período de tempo indefinido) quando:

1. Ligação a um servidor.

2. P1. ao mudar entre contas.

3. Enquanto se inicia o terminal.

A última vez que o fiz, o terminal desligou no arranque. Olhei para o gestor de tarefas, o terminal comeu byte de memória byte, após alguns minutos comeu toda a memória de 8Gb e o sistema operativo pendurado juntamente com o terminal. Tive de premir o botão "reset" na unidade do sistema.

Depois de reiniciar o computador, iniciei o terminal e o histórico com repetições de pendências, o sistema deixou de responder às minhas frenéticas tentativas de o acordar juntamente com o terminal.

Depois de reiniciar o computador, apaguei todos os ficheiros de configuração do terminal, lancei-o - histórico com pendências de novo.

Após reiniciar o computador, apaguei todos os ficheiros de histórico do servidor comercial e só depois é que o computador móvel começou a funcionar normalmente, e só depois de alguma reflexão durante cerca de 3 minutos.

O terminal fica pendurado de edifício em edifício. Win10x64.

 
Joo Zepper:

Quando é que o terminal pode desligar? - Parece haver situações normais em que o terminal é suposto ser pendurado.

De acordo com as minhas observações, o terminal fica sempre suspenso (suspenso por um período de tempo indefinido) quando:

1. Ligação a um servidor.

2. P1. ao mudar entre contas.

3. Enquanto se inicia o terminal.

Da última vez, o terminal desligou durante o arranque. Olhei para o gestor de tarefas, o terminal comeu byte de memória byte, após alguns minutos comeu toda a memória de 8Gb e o sistema operativo pendurado juntamente com o terminal. Tive de premir o botão "reset" na unidade do sistema.

Depois de reiniciar o computador iniciei o terminal - o histórico com o congelamento repetido, o sistema deixou de responder às minhas frenéticas tentativas de o acordar juntamente com o terminal.

Depois de reiniciar o computador, apaguei todos os ficheiros de configuração do terminal, lancei-o - histórico com pendências de novo.

Após reiniciar o computador, apaguei todos os ficheiros de histórico do servidor comercial e só depois é que o computador móvel começou a funcionar normalmente, e só depois de alguma reflexão durante cerca de 3 minutos.

O terminal fica pendurado de edifício em edifício. Win10x64.

O mesmo vento, o terminal parte apenas de admin, e todos os ficheiros do metaeditor também de admin, sem problemas.
 

Esta é a primeira vez que me deparo com este tipo de código, por isso pergunto a especialistas experientes como dividir o código em partes e incluir correctamente os ficheiros

Aqui está um exemplo

class WL : public C_Object
  {
private:
   MqlTick           tick;
   struct STRUCT_SYMBOL // Структура символа
     {    
      bool              TRADING_IS_ALLOWED;      // Обновлять
      double            INDIKATOR_VOLUME;        // Обновлять
     };
   struct STRUCT_WATCH_LIST // Структура сохраненных листов
     {
      string            NAME_LIST;
     };
   STRUCT_WATCH_LIST WatchList[];
   STRUCT_SYMBOL     SymbolMass[];
}

Isto é, uma classe herda de outra classe e tem uma estrutura; a estrutura no exemplo, abreviei-a, e depois há métodos de trabalhar com uma variedade da estrutura

Tenho 40-50 ou talvez mais destes métodos.

Gostaria de mover cada método para o ficheiro de inclusão ou organizar a estrutura de código de outra forma, de modo a não criar 10 000-20 000 linhas de código no próprio Expert Advisor que será difícil de pesquisar mais tarde.

A única coisa que posso ver actualmente é o envio de um conjunto da estrutura por referência

como

func(STRUCT_SYMBOL & str)

Parece-me que esta não é uma boa escolha.

O que podemos fazer?

 
coderex:

Compreendo o processo de eliminação de objectos explicitamente eliminados (criados na memória atribuída). Estou interessado no processo de libertar a memória e apagar objectos criados na memória automática.

Por exemplo, existem dois objectos e uma variável de um tipo fundamental:

Gostaria de saber que ordem de desalocação de memória e eliminação de todos os objectos será seguida ao eliminar o programa.

OnDeinit não tem nada a ver com isto.

Já leu a documentação?

 
Vladimir Pastushak:
O terminal é executado apenas a partir de admin, e todos os ficheiros de meta-editores são também de admin, sem problemas.
do administrador? ou talvez o terminal deveria receber um chapéu com uma cruz, uma maçã dourada e um bastão, e ser chamado o Rei Santíssimo de toda a Rússia?
 
Vladimir Pastushak:

Esta é a primeira vez que me deparo com este tipo de código, por isso pergunto a especialistas experientes como dividir o código em partes e incluir correctamente os ficheiros

Aqui está um exemplo

Isto é, uma classe herda de outra classe e tem uma estrutura; a estrutura no exemplo, abreviei-a, e depois há métodos de trabalhar com uma variedade da estrutura

Tenho 40-50 ou talvez mais destes métodos.

Gostaria de mover cada método para o ficheiro de inclusão ou organizar a estrutura de código de outra forma, de modo a não criar 10 000-20 000 linhas de código no próprio Expert Advisor que será difícil de pesquisar mais tarde.

A única coisa que posso ver neste momento é o envio de um conjunto de estruturas por referência

como

Não me parece que esta seja a melhor escolha.

O que é que posso fazer ?

Se as classes forem capacitivas, é melhor criar uma listagem separada para cada classe e no código onde os objectos desta classe são utilizados, incluir a listagem da classe através de #include. O mesmo se aplica às estruturas e bibliotecas de funções. Se as classes e estruturas não forem capacitivas, pode incluí-las numa única listagem. Pode também criar uma listagem de definições e macros comuns.

E não tenha medo de ter uma família inteira de listagens relacionadas com um programa, é comum, tenho nos meus sistemas de negociação utilizado 15-20 listagens, mais directórios com .bmp e .gif para a interface. Distribuo todas as listagens em directórios separados. É mais fácil de navegar quando se apanha erros e se actualiza.