Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Apropos Intuition. Ich möchte Ihnen ein interessantes Beispiel geben. Mein Beitrag, der in diesem Thread https://www.mql5.com/ru/forum/95632/page12 abgedruckt ist,liegt mehr als zwei Jahre zurück:
1. Das Konzept einer Grafik-Engine.
2. Konzept des Grafikkerns.
3. die Phasen der Erstellung des Visual Studio für die MT-Plattform.
4. eine Beschreibung des Mechanismus zur Erstellung von EA-Schnittstellen.
DieGrafik-Engine ist ein Programm, das als Indikator konzipiert ist.Dieses Programm ist ausschließlich für die Verwaltung der Benutzeroberfläche bestimmt. Sie führt eine Reihe von Grundfunktionen aus:
Die Grafik-Engine wird wie jeder andere Indikator zu einem Diagramm hinzugefügt . Sie umfasst die folgenden Fenster:
Dies ist im Prinzip das Ende des Konzepts der grafischen Maschine. Das Wichtigste ist, dass ohne sie der Betrieb der Schnittstelle unmöglich ist.
Eine Grafik-Engine ist ein Informationsblock, der die Daten aller Objekte und Fenster in einer Schnittstelle enthält, die in einem Array erfasst und in einer Datei gespeichert werden.
Dieser Block ist eine digitale Darstellung der grafischen Schnittstelle. Sie wird von der Grafik-Engine auf Anfrage des Benutzers geladen. Die Grafik-Engine selbst verfügt über einen eigenen, internen Grafik-Kernel, der den Betrieb seiner eigenen Fenster sicherstellt, und innerhalb dieses Kernels wird freier Platz für die Integration der Benutzeroberfläche (in digitaler Form) in ihn bereitgestellt. Die Integration erfolgt durch das Laden des grafischen Kerns aus einer Datei.
3. Die Erstellung eines Visual Studios auf der MT-Plattform ist meines Wissens nach in zwei Phasen unterteilt:
4. Ich möchte den Mechanismus der Schnittstellenerstellung skizzieren und den Schleier über die Technologie etwas lüften. Erläutern Sie, woher die Einfachheit der Erstellung einer Schnittstelle über eine Datei kommt.
Dies ist der Fall: Die Engine verfügt über eine spezielle Funktion, die einen vollständigen grafischen Kernel auf der Grundlage einer einzigen Datei mit einem Minimum an Ladeinformationen erstellt. Die Boot-Informationen in dieser Datei sind selbsterklärend und für den Menschen lesbar. Er ist leicht zu schreiben und zu bearbeiten. Zum Beispiel müssen Sie "_CREATE_NEW_WINDOW" schreiben, um ein Fenster zu erstellen , und "_CHECKBOX" und den Namen des Kontrollkästchens (die Engine erkennt automatisch den Namen des Elements, den Namen des Elements selbst und den Namen seines Parameters).
Diese Funktion heißt "G_CORE_BUILDER()" und baut den grafischen Kern auf, indem sie Daten aus zwei Hauptquellen übernimmt: eine vom Benutzer erstellte Startdatei und das Array "CONTENT[]", das alle Standard-Objektgruppen enthält, die in Windows- und Controls-Plattformen enthalten sind. " CONTENT[]" enthält auch Zustände und Skripte von Objekten. Alles in einer Reihe. Im Allgemeinen wird das Quellmaterial aus "CONTENT[]" + der vom Benutzer erstellten Loader-Datei von "G_CORE_BUILDER()" verwendet, um den grafischen Kern zu erstellen, mit dem die Engine arbeitet.
Es ist erstaunlich, wie sehr sich die Begriffe und Konzepte in zwei Jahren harter Arbeit NICHT verändert haben. Und Funktionen, Arrays und Schlüsselwörter sind so, wie es hier steht. Alles ist nach diesem Szenario umgesetzt worden. Und diese Technologie funktioniert und entwickelt sich weiter, obwohlich vor zwei Jahren noch überhaupt keine Erfahrung mit der Entwicklung einer Auszeichnungssprache hatte.
Ich bin nicht in eine Sackgasse geraten, ich habe das Konzept nicht geändert, ich habe die Richtung nicht geändert. Ich habe den Motor, den Kern und die Auszeichnungssprache genau so weiter entwickelt , wie ich es ursprünglich vorhatte. Und die Praxis bestätigt, dass der Weg, den ich gewählt habe, der richtige war.
Wenn das keine prophetische Intuition ist, was ist es dann?
Liebe Gegner.
Hier ist der Skriptcode, der:
Ergebnis:
Meine Lösung ist mehr als 10 Mal schneller.
Fügen Sie zu Ihrer Lösung die Zeit zum Speichern der Ressource und die Zeit zum Abrufen der Ressource in das Array mit ResourceReadImage() hinzu;
Bei meiner Lösung ist weder das erste noch das zweite erforderlich.
Meine Lösung ist mehr als 10 Mal schneller.
Peter, wenn Sie mit String arbeiten, verlieren Sie auf jeden Fall an Leistung. Daher ist es überraschend, dass Sie einer mythischen Leistung nachjagen, obwohl Sie ursprünglich eine ungeeignete Lösung dafür gewählt haben: die Übermittlung von Nachrichten durch einen String und das anschließende Parsen dieser Nachricht.
Peter, wenn Sie mit String arbeiten, verlieren Sie auf jeden Fall an Leistung. Daher ist es überraschend, dass Sie eine mythische Leistung anstreben, obwohl Sie sich ursprünglich für eine ungeeignete Lösung entschieden haben: die Weiterleitung von Nachrichten über eine Zeichenkette und das anschließende Parsen dieser Nachricht.
Vasily, wie kann man sonst Daten aller Art zwischen Programmen übertragen?
OnChartEvent() ist teilweise geeignet.
Übrigens ist die Messung von weniger als 20 Millisekunden streng genommen überhaupt nicht zulässig, zumindest in Systemen mit präemptivem Multithreading. Aber selbst wenn Sie Ihr Ergebnis akzeptieren (im Allgemeinen gebe ich es zu), sagt es Ihnen immer noch nichts, denn es sind die Vollkosten, die zählen. Und was Sie gemessen haben, ist nur ein Teil davon.
Ich brauche eine universelle und schnelle Lösung. Um im Tester zu arbeiten und die OnChartEvent()-Ereigniswarteschlange zu umgehen;
Der Test zeigt, dass die Übertragung durch die Ressourcen 10 Mal langsamer ist. (ohne Messung der Zeit für das Speichern der Ressource und das Abrufen von Daten aus diesermittels ResourceReadImage()) .
Meine Lösung ist die beste Option unter den Ausgangsbedingungen.
...Aber selbst wenn Sie Ihr Ergebnis akzeptieren (im Allgemeinen gebe ich es zu), sagt es Ihnen immer noch nichts, denn es sind die Vollkreiskosten, die zählen. Und was Sie gemessen haben, ist nur ein Teil davon.
Stimmt, aber wenn man die Anzahl der Linien und Gänge hochrechnet, gewinnt meine Option immer noch.
Vasiliy, wie übertragen Sie sonst Daten aller Art zwischen Programmen?
Direkte Abbildung von Strukturen über Union auf Byte-Array, gemeinsam genutzt für globalen Zugriff. Ich weiß nicht, ob das technisch machbar ist, aber wenn ja, wird die Geschwindigkeit kosmisch sein, weil man gar nichts mehr kopieren muss.