Fehler, Irrtümer, Fragen - Seite 2201

 

Heute Abend beschlossen, eine Seite aus dem Englischen zu übersetzen -

"Die Website verwendet Cookies. Erfahren Sie mehr über unsere Cookie-Richtlinie".

Ich habe den Link in Yandex Translator eingegeben und die Übersetzung gelesen. Als ich die MQL5-Website aufrief, erhielt ich die folgende Meldung:

Wie kann man Seiten aus anderen Sprachen korrekt übersetzen, damit es nicht zu solchen Problemen kommt?
 
Vladimir M.:

Heute Abend beschlossen, eine Seite aus dem Englischen zu übersetzen -

"Die Website verwendet Cookies. Erfahren Sie mehr über unsere Cookie-Richtlinie".

Ich habe den Link in Yandex Translator eingegeben und die Übersetzung gelesen. Als ich die MQL5-Website aufrief, erhielt ich die folgende Meldung:

Wie lassen sich Seiten aus anderen Sprachen korrekt übersetzen, um dies zu vermeiden?

Irgendwie bezweifle ich, dass der Text unsichtbare Platzhalter in eindeutiger Kombination enthält, um Benutzer zu identifizieren, die das Kopieren verwenden.
Aber es könnte sein....

 

Liebe Freunde, ich appelliere an Ihre Erfahrung und bitte Sie um Ihre Unterstützung bei der Suche nach der richtigen Lösung.

Ich habe einen EA, der in bestimmten Abständen (alle paar Minuten) Daten in eine Datei entlädt, ein externes Programm ausführt und Daten aus der Datei liest. Der gesamte Zyklus dauert etwa 600 Millisekunden.

Wie kann man beim Testen einer Strategie dafür sorgen, dass das Programm wartet, bis das externe Programm beendet ist (d.h. während dieser Zeit sollte der Preisstrom angehalten werden, oder idealerweise Ticks für 600 Millisekunden überspringen)?

Ansonsten fliegen jetzt beim Ausführen eines externen Programms mehrere Tage Ticks beim Testen einer Strategie vorbei :-(. Im visuellen Tester funktioniert der EA. Aber es würde unglaublich viel Zeit in Anspruch nehmen, eine Strategie an mehreren Jahren der Geschichte zu testen.

 
fxsaber:

Ich verstehe das überhaupt nicht. Hier ist der Code

Es beschwert sich irgendwie über die Übergabe eines Zeigers per Referenz. Gleichzeitig erhält die Funktion f in aller Ruhe den Zeiger als Referenz.


Das Ergebnis ist

Der int-Operator wurde ohne Probleme aufgerufen, der Pointer-Operator hingegen nicht.

Ja, es gibt ein solches Problem: Ein Fehler tritt auf, wenn ein Zeiger per Referenz an einen überladenen Operator übergeben wird. Dies ist in den letzten Builds aufgetreten, vorher war alles in Ordnung. Ich habe schon seit einigen Monaten eine Anfrage an den Helpdesk geschickt, aber es gibt keine Antwort oder ein Hallo wie immer.

Dies ist besonders kritisch für Zeiger-Arrays, da es keine andere Möglichkeit gibt, sie zu senden, außer per Referenz:

class A
{
 public: 
  A* operator+(const A*const& array[]) { return NULL; }
};

Ich sitze also immer noch auf dem 1554er Build.

 
romachandr:

Nun ja, als eine Art "Hatchet Job" (was nicht heißt, dass er schlecht ist):

Experte:

1. die Befehlsshell-Skriptdatei heißt

2. es wird eine Datei erwartet, die den Abschluss der externen Maßnahmen signalisiert

3. Signaldatei wird gelöscht


Kommando-Shell-Skript:

1. ein externes Programm ausführen

2. Erstellung der Signaldatei

Also: Der Link wurde automatisch eingefügt, darum geht es gar nicht.

Übrigens, wie führt man ein externes Programm aus? Wenn über einige ProcessCreate() oder ShelExecute(), dann können Sie die resultierende Handle zu WaitForSingleObject() geben, aber das ist mit winapi Typ Deklaration tanzen.

 
pavlick_:

Nun ja, als eine Art "Hatchet Job" (was nicht heißt, dass er schlecht ist):

Experte:

1. die Befehlsshell-Skriptdatei heißt

2. es wird eine Datei erwartet, die den Abschluss der externen Maßnahmen signalisiert

3. Signaldatei wird gelöscht


Kommando-Shell-Skript:

1. ein externes Programm ausführen

2. Erstellung der Signaldatei

Also: Der Link wurde automatisch eingefügt, darum geht es gar nicht.

Übrigens, wie führt man ein externes Programm aus? Wenn durch einige processCreate() oder ShelExecute(), dann können Sie das resultierende Handle zu WaitForSingleObject() geben, aber das ist ein Tanz mit Typ-Deklaration winapi.

Das externe Programm wird mit ShellExecuteW() gestartet.

Am Ende der Programmausführung wird eine Datei erzeugt. Es kann sich sogar um eine Signaldatei handeln.

Aber ich verstehe nicht, wie man den Tester zu diesem Zeitpunkt aussetzen kann?

Ich bin mit winapi nicht wirklich vertraut. Wenn es wirklich hilft, bin ich bereit, tiefer zu gehen.

 
romachandr:

Das externe Programm wird mit ShellExecuteW() gestartet.

Am Ausgang der Programmausführung wird eine Datei erzeugt. Im Wesentlichen kann es sich um eine Signaldatei handeln.

Aber ich verstehe nicht, wie man den Tester zu diesem Zeitpunkt aussetzen kann?

Ich bin mit winapi nicht wirklich vertraut. Wenn es wirklich hilft, bin ich bereit, tiefer zu gehen.

Die Winapi verfügt über den folgenden Mechanismus:

Die Objekte, die durch den bei der Erstellung zurückgegebenen HANDLE beschrieben werden (Threads, Prozesse, Mutexe, ...) haben ein Signalflag. Wenn es sich um einen Prozess handelt, wird er bei dessen Beendigung gesetzt. WaitForSingleObject() hält die Ausführung des aktuellen Threads (Ihres EA) an, bis das Flag gesetzt ist, d.h. der EA wird WaitForSingleObject() beenden, nachdem das externe Programm beendet wurde.

ShellExecuteW() gibt HINSTANCE statt HANDLE zurück, ich bin mir nicht sicher, ob es für die Funktion WaitForSingleObject() funktioniert, aber es ist einen Versuch wert. Wenn es fehlschlägt, sollten Sie z. B. ShellExecuteEx verwenden (allerdings werden darin nicht-triviale Argumente übergeben).

http://fkn.ktu10.com/?q=node/633

https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx

 
pavlick_:

Winapi verfügt über den folgenden Mechanismus:

Objekte, die durch den bei der Erstellung zurückgegebenen HANDLE beschrieben werden (Threads, Prozesse, Mutexe, ...) haben ein Signalflag. Wenn es sich um einen Prozess handelt, wird er bei dessen Beendigung gesetzt. WaitForSingleObject() hält die Ausführung des aktuellen Threads (Ihres EA) an, bis das Flag gesetzt ist, d.h. der EA wird WaitForSingleObject() beenden, nachdem das externe Programm beendet wurde.

ShellExecuteW() gibt HINSTANCE statt HANDLE zurück, ich bin mir nicht sicher, ob es für die Funktion WaitForSingleObject() funktioniert, aber es ist einen Versuch wert. Wenn es fehlschlägt, sollten Sie z. B. ShellExecuteEx verwenden (aber es wird nicht-triviale Argumente innerhalb übergeben).

http://fkn.ktu10.com/?q=node/633

https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx

Danke für den Tipp!

Ich werde mich damit befassen.

 
romachandr:

Aber ich verstehe nicht, wie man das Prüfgerät zu diesem Zeitpunkt anhalten kann?

#import "Kernel32.dll"
 void Sleep(int milliseconds);
#import


void OnTick()
{
  while(! Condition()) Kernel32::Sleep(10);
}
 
Was ist so schwer? Behalten Sie die Ergebnisdatei im Auge + Native Sleep löst das Problem.