Errori, bug, domande - pagina 1509

 
Дмитрий Касаткин:
Non posso accedere alla piattaforma, il sito web dice che il terminale web non è supportato da questo MetaTrader Server. Contatta il tuo broker per aggiornare il server, la piattaforma dice nessuna connessione?
Il tuo broker non supporta il terminale web. Se il terminale è installato sul tuo computer e non c'è connessione, dovresti aprire la porta443 se era chiusa prima.
 
Cari sviluppatori, qual è l'ordine della funzione OnDeinit - l'ordine di cancellazione degli oggetti e delle altre variabili, la cancellazione della memoria, ecc.
 
coderex:
Cari sviluppatori, qual è l'ordine dell'operazione della funzione OnDeinit - l'ordine di cancellazione degli oggetti e delle altre variabili, la cancellazione della memoria, ecc.

OnDeinit è una funzione ordinaria in MQL4/5 che viene chiamata in certe situazioni. Questo è il modo in cui lo si programma, così sarà.

Per favore, sii più specifico nella tua domanda. Cosa ti interessa esattamente?

 
Slawa:

OnDeinit è una funzione ordinaria in MQL4/5 che viene chiamata in certe situazioni. Questo è il modo in cui lo si programma, così sarà.

Per favore, sii più specifico nella tua domanda. Cosa ti interessa esattamente?

Con gli oggetti che sono esplicitamente cancellati (creati nella memoria allocata), tutto è chiaro. Quello che mi interessa è il processo di liberazione della memoria e di cancellazione degli oggetti creati nella memoria incustodita.

Cioè ci sono, per esempio, due oggetti e una variabile di tipo fondamentale:

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;
}

Mi interessa sapere quale sarà l'ordine di liberazione della memoria e di cancellazione di tutti gli oggetti, quando il programma viene cancellato.

 
Slawa:

...

Quando può bloccarsi il terminale? - Sembra che ci siano situazioni normali in cui il terminale dovrebbe bloccarsi.

Da quello che ho visto, si blocca sempre (si blocca per un periodo di tempo indefinito) quando:

1. Connessione a un server.

2. P1. Quando si passa da un conto all'altro.

3. Durante l'avvio del terminale.

L'ultima volta che l'ho fatto, il terminale si è bloccato all'avvio. Ho guardato il task manager, il terminale si è mangiato la memoria a poco a poco, dopo un paio di minuti si è mangiato tutti gli 8Gb di memoria e il sistema operativo si è bloccato insieme al terminale. Ho dovuto premere il pulsante "reset" sull'unità di sistema.

Dopo aver riavviato il computer ho avviato il terminale e la storia dei blocchi si ripete, il sistema ha smesso di rispondere ai miei frenetici tentativi di svegliarlo insieme al terminale.

Dopo aver riavviato il computer ho cancellato tutti i file di configurazione del terminale, l'ho lanciato - la storia si blocca di nuovo.

Dopo aver riavviato il computer, ho cancellato tutti i file della cronologia del server commerciale e solo dopo questo il computer mobile ha iniziato a funzionare normalmente, e solo dopo averci pensato per circa 3 minuti.

Il terminale si blocca da costruzione a costruzione. Win10x64.

 
Joo Zepper:

Quando il terminale può riagganciare? - Sembra che ci siano situazioni normali in cui il terminale dovrebbe bloccarsi.

Secondo le mie osservazioni, il terminale si blocca sempre (si blocca per un periodo di tempo indefinito) quando:

1. Connessione a un server.

2. P1. Quando si passa da un conto all'altro.

3. Durante l'avvio del terminale.

L'ultima volta che l'ho fatto, il terminale si è bloccato all'avvio. Ho guardato il task manager, il terminale si è mangiato la memoria a poco a poco, dopo un paio di minuti si è mangiato tutti gli 8Gb di memoria e il sistema operativo si è bloccato insieme al terminale. Ho dovuto premere il pulsante "reset" sull'unità di sistema.

Dopo aver riavviato il computer ho avviato il terminale - storia con congelamento ripetuto, il sistema ha smesso di rispondere ai miei frenetici tentativi di svegliarlo insieme al terminale.

Dopo aver riavviato il computer ho cancellato tutti i file di configurazione del terminale, l'ho lanciato - la storia si blocca di nuovo.

Dopo aver riavviato il computer, ho cancellato tutti i file della cronologia del server commerciale e solo dopo questo il computer mobile ha iniziato a funzionare normalmente, e solo dopo averci pensato per circa 3 minuti.

Il terminale si blocca da costruzione a costruzione. Win10x64.

Lo stesso vento, il terminale si avvia solo da admin, e tutti i file metaeditor anche da admin, nessun problema.
 

È la prima volta che incontro questo tipo di codice, quindi chiedo agli esperti come dividere il codice in parti e includere correttamente i file

Ecco un esempio

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[];
}

Cioè una classe eredita da un'altra classe e ha una struttura; la struttura nell'esempio, l'ho abbreviata, e poi ci sono metodi per lavorare con un array della struttura

Ho 40-50 o forse più di questi metodi.

Vorrei spostare ogni metodo nel file include o organizzare la struttura del codice in qualche altro modo, in modo da non creare 10 000-20 000 linee di codice nell'Expert Advisor stesso che sarà difficile da cercare in seguito.

L'unica cosa che posso vedere al momento è inviare un array della struttura per riferimento

come

func(STRUCT_SYMBOL & str)

Mi sembra che questa non sia una buona scelta.

Cosa possiamo fare?

 
coderex:

Capisco il processo di cancellazione degli oggetti cancellati esplicitamente (creati nella memoria allocata). Sono interessato al processo di liberazione della memoria e alla cancellazione degli oggetti creati nella memoria automatica.

Per esempio, ci sono due oggetti e una variabile di tipo fondamentale:

Vorrei sapere quale ordine di deallocazione della memoria e di cancellazione di tutti gli oggetti seguirà quando si cancella il programma.

OnDeinit non ha niente a che fare con questo.

Avete letto la documentazione?

 
Vladimir Pastushak:
Il terminale viene eseguito solo da admin, e tutti i file meta-editor sono anche da admin, nessun problema.
dall'amministrazione? o forse il terminale dovrebbe ricevere un cappello con una croce, una mela d'oro e un bastone, ed essere chiamato il Re più santo di tutta la Russia?
 
Vladimir Pastushak:

È la prima volta che incontro questo tipo di codice, quindi chiedo agli esperti come dividere il codice in parti e includere correttamente i file

Ecco un esempio

Cioè una classe eredita da un'altra classe e ha una struttura; la struttura nell'esempio, l'ho abbreviata, e poi ci sono metodi per lavorare con un array della struttura

Ho 40-50 o forse più di questi metodi.

Vorrei spostare ogni metodo nel file include o organizzare la struttura del codice in qualche altro modo, in modo da non creare 10 000-20 000 linee di codice nell'Expert Advisor stesso che sarà difficile da cercare in seguito.

L'unica cosa che posso vedere al momento è inviare un array di strutture per riferimento

come

Non credo che questa sia la scelta migliore.

Cosa posso fare?

Se le classi sono capienti, è meglio creare un elenco separato per ogni classe e nel codice in cui si usano gli oggetti di questa classe, includere l'elenco della classe attraverso #include. Lo stesso vale per le strutture e le librerie di funzioni. Se le classi e le strutture non sono capienti, puoi includerle in un unico elenco. Potete anche creare un elenco di definizioni e macro comuni.

E non abbiate paura di avere un'intera famiglia di elenchi relativi a un programma, è comune, ho usato nei miei sistemi di trading 15-20 elenchi, più le directory con .bmp e .gif per l'interfaccia. Distribuisco tutti gli annunci in elenchi separati. È più facile da navigare quando si trovano errori e aggiornamenti.