Fehler, Irrtümer, Fragen - Seite 1845

 
Nikolai Semko:
Eine Bitte an die Entwickler.
Die Möglichkeit, einige Variablen oder Arrays zu speichern, wenn man den Zeitrahmen wechselt, so dass sie nicht neu initialisiert werden müssen, fehlt sehr. Oder kann dies irgendwie überOnDeinit erfolgen, indem ein REASON_CHARTCHANGE-Grundcode definiert wird?
Ich habe nur ziemlich umständliche zeitabhängige Berechnungen im Hauptteil meines Programms und möchte sie nicht jedes Mal neu berechnen. Ich glaube, wir vermissen eine spezielle Art von globalen Variablen, die nicht neu initialisiert werden, wenn sich der Zeitrahmen ändert. Ich habe gelernt, wie man es mit einfachen Variablen ohne globale Variablen im Terminal macht, aber mit Strukturen oder Arrays habe ich keine Ahnung, wie man es macht, und es scheint, dass eine solche Möglichkeit einfach nicht existiert. Sie können natürlich Ressourcen nutzen, aber das ist sehr verwirrend.
Versuchen Sie, einen Indikator zu verwenden. Die globalen Variablen werden dort beim Wechsel der TF nicht reinitialisiert (soweit ich mich erinnere). Oder durch eine Datei.
 
Konstantin:

Wie?

Zum Beispiel so:

struct MyArray
{
   double buff[];
   
   MyArray()
   {
   }
   MyArray( int n )
   {
      ArrayResize( buff, n );
   }
   MyArray( const MyArray& other )
   {
      ArrayCopy( buff, other.buff );
   }
   ~MyArray()
   {
      ArrayFree( buff );
   }
   
   void operator=( const MyArray& other )
   {
      ArrayCopy( buff, other.buff );
   }
   
   void assign( int n, const double val = 0.0 )
   {
      ArrayResize( buff, n );
      ArrayInitialize( buff, val );
   }
};

MyArray func()
{
   MyArray myArray;
   
   // Заполняем массив.
   
   return myArray;
}
 
Koldun Zloy:

Zum Beispiel so:

Das war nicht die Frage, aber vielleicht würde das dem Verfasser der Frage passen, auf die es eine eindeutige Antwort gibt: KEINE.

Es gibt keine Ablehnung im Service Desk

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2017.04.02 10:34

Ist es möglich, das Fehlen von Zeigern auf ein Array auszugleichen, indem man die Möglichkeit einführt, ein Array mit einer Funktion zurückzugeben?
int[] Func()
{
  int a[] = {1, 2, 3};

  return(a);
}

Print(Func()[1]); // 2

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2017.04.01 10:20

Vor einiger Zeit wurde der Operator [] zum Stringtyp hinzugefügt
string Str = "AB C";
Print(CharToString(Str[1])); // B


Ist es auf der Entwicklerseite möglich, einen =-Operator für Arrays hinzuzufügen?

int a[], b[];
a = b; // ArrayCopy(a, b);


Da es keine Zeiger gibt, würde ein solcher Operator die Sprache flexibler machen - es wurden Situationen gefunden, in denen er SEHR nützlich wäre.

 
Alexey Kozitsyn:
Versuchen Sie es mit einem Indikator. Dort werden die globalen Variablen nicht neu initialisiert, wenn sich die TF ändert (soweit ich mich erinnere). Oder durch eine Datei.

Es ist genau andersherum:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Initialisierung globaler Programmvariablen und anderes nützliches Wissen.

Artyom Trishkin, 2016.12.05 20:27

Antwort von SD erhalten:


Ich denke, Sie können eine solche Funktion von EAs mit globalen Variablen sicher nutzen.


 
Alexey Kozitsyn:
Versuchen Sie es mit einem Indikator. Die globalen Variablen werden nicht neu initialisiert, wenn die TF geändert wird (soweit ich mich erinnere). Oder durch eine Datei.

Hierfür verwende ich den Indikator. Sie werden neu initialisiert. Die Datei ist überhaupt keine Option, sie ist langsam und es ist schwierig, eine gute Synchronisation zu gewährleisten. In diesem Fall würde ich besserResourceCreate verwenden.Aber das alles ist nicht sehr praktisch. Wenn ich Dutzende von Arrays haben, einige von ihnen mit mehreren Mb, muss ich mindestens zwei Funktionen des Lesens und Schreibens zu schreiben, erstellen Sie einen Handler aufOnDeinit. Ich habe bereits mit all dem experimentiert und stand vor dem Problem der Synchronisation, da Ressourcen und Dateien im Multithreading ein Eigenleben führen. Warum einen Buckel machen, wenn es einfach nicht genug Möglichkeiten gibt, sich bei bestimmten Ereignissen, in meinem Fall bei einer Zeitrahmenänderung,nicht neu zu initialisieren?
 
Nikolai Semko:

Indikator und ich benutze ihn. Reinitialisiert. Datei ist überhaupt keine Option, sie ist langsam und es ist schwer, eine qualitativ hochwertige Synchronisierung zu gewährleisten. In diesem Fall würde ich besserResourceCreate verwenden.Aber das alles ist nicht sehr praktisch. Wenn ich Dutzende von Arrays haben, einige von ihnen mit mehreren Mb, muss ich mindestens zwei Funktionen des Lesens und Schreibens zu schreiben, erstellen Sie einen Handler aufOnDeinit. Ich habe bereits mit all dem experimentiert und stand vor dem Problem der Synchronisation, da Ressourcen und Dateien im Multithreading ein Eigenleben führen. Ichweiß nicht, warum ich mir die Mühe gemacht habe, wenn ich einfach nur die Neuinitialisierung eines bestimmten Ereignisses vermeiden will, in meinem Fall war es eine Zeitrahmenänderung.
Die Antwort finden Sie hier.
 
Artyom Trishkin:

Es ist genau das Gegenteil:



Danke, ich wusste nichts von dem EA!
Aber Mann, wenn ich den Chip im Blinker brauche!

 
Koldun Zloy:

Zum Beispiel so:


danke für das Beispiel, aber die Erstellung eines Objekts eines komplexen Typs wegen eines einzigen Arrays ist genau das, was ich nicht will, es fühlt sich alles wie unnötigen Code ))
 
fxsaber:

Das war nicht die Frage, aber vielleicht würde das dem Verfasser der Frage passen, auf die es eine eindeutige Antwort gibt - KEINE.

Dies kann beim Service Desk nicht abgelehnt werden.



hoffen wir, dass sie diese Funktion einführen werden, obwohl es üblicher wäre, einen Zeiger für Arrays einzuführen
 
Artyom Trishkin:

Es ist genau das Gegenteil:

Oh, Mann... Ja, ich habe mich genau an deinem Beitrag orientiert, habe nur alles durcheinander gebracht:)