Diskussion zum Artikel "Grafische Interfaces X: Erweitertes Management von Listen und Tabellen Code Optimierung (build 7)" - Seite 3
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
Tol, mir ist klar, dass dies nicht das richtige Thema ist, aber seit dem letzten Update....
Allgemein: Ich habe es schon vor längerer Zeit bemerkt, aber ich habe auf dieses Update gewartet (für den Fall, dass es behoben wird, aber nein...).
Wenn es ein Fenster mit einem Diagramm (CStandartChart) gibt, und es gibt ein Fenster, das sich über dem Untergraphen befindet, dann, wenn die Verbindung mit dem Server verloren geht, und dann wiederhergestellt wird, wird das Objektdiagramm höher als die anderen Fenster.
Es wäre notwendig, das oberste Fenster irgendwie neu zu zeichnen. Es ist klar, dass Sie dies in Ihrem CProgramm verfolgen können, aber mir scheint, dass die Bibliothek solche Dinge tun sollte.
(Sie ist sehr langsam, aber das liegt wahrscheinlich an der Echtzeitaufzeichnung).
...
Wenn es ein Fenster mit einem Diagramm (CStandartChart) gibt, und es gibt ein Fenster auf der Oberseite des Untergraphen, dann, wenn die Verbindung mit dem Server verloren geht und dann wiederhergestellt wird, wird das Diagramm-Objekt höher als die anderen Fenster.
Es wäre notwendig, das oberste Fenster irgendwie neu zu zeichnen. Es ist klar, dass Sie dies in Ihrem CProgramm verfolgen können, aber mir scheint, dass die Bibliothek solche Dinge tun sollte.
(Sie ist zwar sehr langsam, aber das liegt wahrscheinlich an der Echtzeit-Aufzeichnung).
Ok, danke für die Nachricht. Ich habe das mit dem Trennen/Wiederverbinden noch nicht getestet. Ich werde sehen, was ich tun kann.
Warum sind die Bremsen so schlecht? Welches Programm wird für die Aufnahme verwendet? Es ist sehr langsam. Es sieht so aus, als ob der Prozessor zu 100% ausgelastet ist? Ich habe versucht, mit Fast Stone Capture aufzunehmen und aktiv die GUI in der MQL-Anwendung zu verwenden. Alles ist normal, nichts verlangsamt sich auf diese Weise.
Okay, danke für die Nachricht. Ich habe noch nicht getestet, ob ich die Verbindung unterbrechen und wiederherstellen kann. Ich werde sehen, was ich tun kann.
Was sind die Gründe für die Verlangsamung? Welches Programm wird für die Aufzeichnung verwendet? Es ist sehr langsam. Es sieht so aus, als ob der Prozessor zu 100% ausgelastet ist? Ich habe versucht, mit Fast Stone Capture aufzunehmen und aktiv die grafische Benutzeroberfläche in der MQL-Anwendung zu verwenden. Alles ist in Ordnung, nichts verlangsamt sich auf diese Weise.
Artyom Trishkin:
...
Übrigens werde ich auch ohne Echtzeit-Aufnahme langsamer.
Es gibt eine Menge von Objekten.
Und der Timer muss viele Symbole nach Kursübergängen scannen, die für jedes Symbol anders sind, und die Liste der Symbole ist dynamisch und muss auch auf Änderungen überwacht werden.
...Und in welchen Abständen werden diese Kontrollen durchgeführt?
Zeitgeber:
//| Timer|
//+------------------------------------------------------------------+
void CProgram::OnTimerEvent(void)
{
CWndEvents::OnTimerEvent();
//---
static int count=0;
if(count<500)
{
count+=TIMER_STEP_MSC;
return;
}
//--- Nullstellung des Zählers
count=0;
//--- Fangen Sie die Änderung im Market Watch auf
if(IsChangeSymbolListInMW()) {
UpdateAllDataAndTables();
}
//--- Erfassen des Erscheinens neuer Balken
bool need_update=false;
for(int i=0; i<ArraySize(m_array_new_bar); i++) {
if(m_array_new_bar[i].isNewBar()>0) {
string sy=m_array_new_bar[i].GetSymbol();
ENUM_TIMEFRAMES timeframe=m_array_new_bar[i].GetPeriod();
Print("Neue Bar".,sy," auf ",GetNameTF(timeframe));
if(timeframe==PERIOD_D1) {
for(int j=0; j<ArraySize(m_array_symbols_new_sig_d1); j++) delete m_array_symbols_new_sig_d1[j].symbol_tick;
ZeroMemory(m_array_symbols_new_sig_d1);
}
if(timeframe==PERIOD_W1) {
for(int j=0; j<ArraySize(m_array_symbols_new_sig_w1); j++) delete m_array_symbols_new_sig_w1[j].symbol_tick;
ZeroMemory(m_array_symbols_new_sig_w1);
}
if(timeframe==PERIOD_MN1) {
for(int j=0; j<ArraySize(m_array_symbols_new_sig_mn); j++) delete m_array_symbols_new_sig_mn[j].symbol_tick;
ZeroMemory(m_array_symbols_new_sig_mn);
}
need_update=true;
}
}
if(need_update) {
UpdateAllDataAndTables();
}
//--- Ändern der Wertetexte im Hauptfenster
short row=(short)m_table_base_symbol_list.SelectedItem();
ChangeTextData(row);
//--- Suche nach Meldekriterien D1, W1, MN1
GetNotify(m_sorted_struct_symbols_d1,m_array_symbols_new_sig_d1,PERIOD_D1);
GetNotify(m_sorted_struct_symbols_w1,m_array_symbols_new_sig_w1,PERIOD_W1);
GetNotify(m_sorted_struct_symbols_mn,m_array_symbols_new_sig_mn,PERIOD_MN1);
//--- Zeichnen Sie das Diagramm neu
m_chart.Redraw();
}
//+------------------------------------------------------------------+
Zeitgeber:
Ist es notwendig, diese Art von Bedingungsprüfung genau im Timer durchzuführen?
Wenn im Timer, warum so oft?
Sie können versuchen, den Schritt zu verringern und für jede Gruppe von Bedingungen ein anderes Intervall festzulegen. Zu diesem Zweck habe ich die Klasse CTimeCounter hinzugefügt. Lesen Sie den Artikel noch einmal, um zu verstehen, wie Sie diese verwenden können. Abschnitt: Anwendung für Itemtest
Ist es notwendig, solche Bedingungen in der Zeitschaltuhr zu überprüfen?
Wenn in der Zeitschaltuhr, warum so oft?
Sie können versuchen, den Schritt zu verringern und für jede Gruppe von Bedingungen ein anderes Intervall festzulegen. Zu diesem Zweck habe ich die Klasse CTimeCounter hinzugefügt. Lesen Sie den Artikel noch einmal, um zu verstehen, wie Sie diese verwenden können. Abschnitt: item test application
Ja, ich denke bereits darüber nach.
Die Prüfung auf einen neuen Balken kann natürlich auch seltener durchgeführt werden - sie ist nicht kritisch. Aber die Prüfung, ob die Kurse bei einigen Symbolen die Niveaus überschreiten (ihre Liste ändert sich dynamisch, bzw. Instanzen der Klasse, die mit Ticks arbeitet, werden dynamisch hinzugefügt/entfernt), sollte oft genug durchgeführt werden, um den Sachverhalt der Überschreitungen rechtzeitig feststellen zu können.
Als ich las, dass es jetzt möglich ist, für verschiedene Ereignisse ein unterschiedliches Intervall zu haben, dachte ich sofort an eine solche Notwendigkeit.
... Aber die Prüfung auf Überschreitung von Kursniveaus bei einigen Symbolen (ihre Liste ändert sich dynamisch, bzw. Instanzen der Klasse, die mit Ticks arbeitet, werden dynamisch hinzugefügt/entfernt) sollte oft genug durchgeführt werden, um die Tatsachen der Überschreitungen rechtzeitig feststellen zu können.
Wenn Sie also mit Ticks arbeiten, ist es besser, diese Prüfungen in OnTick() durchzuführen. Warum sollte der Timer alle 16 ms gemeißelt werden?
Es ist eine Mehrfachwährung. Was OnTick()?
Dann durch Ereignisse. Aber nicht durch einen Timer mit einer solchen Frequenz. Im Allgemeinen sind die Bremsen auf Ihrer Seite, nicht auf der Seite der Bibliothek oder der Videoaufzeichnung. Ich habe keine weiteren Fragen.