Asynchrone und mehrfädige Programmierung in MQL - Seite 35

 
Andrei Novichkov:

Warum nicht in der Dokumentation über die Flagge lesen? Unter https://en.cppreference.com. Und Beispiele mit Diskussion auf stackoverflow.com. Ich nutze diese Informationsquellen in der Regel, und ich rate Ihnen, dies auch zu tun.

Warum wollen Sie sich dann an dem Gespräch beteiligen, wenn Sie nicht für Ihre Worte verantwortlich sind? Ich war an Ihrer Meinung interessiert, nicht an der der Schlaumeier im Handbuch. Gehen Sie mir aus dem Weg. Ich kann die Docks auch ohne Ihre Anweisungen lesen. Und ich brauche diesen ganzen Zoo von future/promise/async nicht, um eine Funktion in einem Thread aufzurufen.

 
Vict:

Warum sollten Sie sich auf ein Gespräch einlassen, wenn Sie nicht für das, was Sie sagen, einstehen? Ich war an Ihrer Meinung interessiert, nicht an der der Schlaumeier im Handbuch. Gehen Sie mir aus dem Weg. Ich kann die Docks auch ohne Ihre Anweisungen lesen. Und ich brauche diesen ganzen Zoo von future/promise/async nicht, um eine Funktion in einem Thread aufzurufen.

Das ergibt keinen Sinn. Sie wissen es nicht, ich habe Ihnen gesagt, wo Sie Informationen finden können. Und es war meine Schuld. Seien Sie öfter ein Freund von Büchern.
 
Andrei Novichkov:
Das ergibt keinen Sinn. Sie wissen es nicht, ich habe Ihnen gesagt, wo Sie Informationen finden können. Und es war meine Schuld. Seien Sie öfter ein Freund von Büchern.

Offensichtlich wissen Sie das auch nicht. Warum über nichts schreiben? Vielleicht weiß ich es nicht, was ist schon dabei? Ich bat um eine normale Stellungnahme, er schickte mich irgendwohin.

Auf der schwarzen Liste, Genosse.

 
Vict:

Offensichtlich wissen Sie das auch nicht. Warum über nichts schreiben? Vielleicht weiß ich es nicht, was ist schon dabei? Ich bat um eine normale Stellungnahme, er schickte mich irgendwohin.

Auf der schwarzen Liste, Genosse.

Ich habe Sie nirgendwo hingeschickt, ich habe nicht einmal daran gedacht. Ich kann solche Fragen nicht gut mit meinen eigenen Worten beantworten, also habe ich über die Dokumentation geschrieben. Noch einmal: Was gibt es da zu beanstanden? Aber wie Sie wollen, schwarz, so schwarz.
 
Andrei Novichkov:
Ich habe Sie nirgendwohin geschickt, das würde mir im Traum nicht einfallen. Ich bin schlecht darin, solche Fragen mit eigenen Worten zu beantworten, also habe ich über die Dokumentation geschrieben. Nochmals: Woran kann man sich stören? Aber wie Sie wollen, schwarz, so schwarz.

Nun, die Dokumentation dazu ist wenig hilfreich

std::launch::deferred die Aufgabe wird auf dem aufrufenden Thread ausgeführt, wenn ihr Ergebnis zum ersten Mal angefordert wird (verzögerte Auswertung)
Ich verstehe nicht wirklich, warum ich ein solches Wunder brauche, ich kann einfach einen Zeiger auf eine Funktion in den Thread übergeben, den ich brauche, und sie dort ohne async( std::launch::deferred) berechnen.
 
Vict:

Ich verstehe nicht wirklich, warum ich so ein Wunder brauche, ich kann einfach einen Zeiger auf eine Funktion in einen Thread übergeben, den ich brauche, und ihn dort ohne async( std::launch::deferred) berechnen.

ist vielleicht off-topic, aber:

bemerkt, dass Microsoft-Beispiele oft als selbstdokumentierter Code geschrieben werden, so dass sie umständliche Konstrukte schreiben, die erweitert und durch den endgültigen Wert ersetzt werden können ( wie, Sie sehen den Code, und Sie bekommen alles auf einen Schlag ))) )

HH: In C#-Beispielen ist es leider nicht so, mehrmals habe ich C# in dem Glauben geschrieben, dass es in der Tat ein Analogon von C++ mit einem gewissen Hangzu OOP ist, es stellt sich heraus, dass es nicht so ist, es ist überhaupt nicht C++, oft kann man nicht an Klassenfelder "herankommen", ohne auf eine Basisklasse zu casten, deshalb muss ich lange umständliche Konstruktionen verwenden, im Allgemeinen ist das Parsen von fertigen Bibliotheken für C# ein echtes Abenteuer!

 

Beachten Sie, dass diese beiden Flags standardmäßig zusammen mit deferred | async angewendet werden, wodurch dem Entwickler die Verantwortung abgenommen wird. Wir sprechen hier über die Haupt-Thread-Funktion, ja, Sie können ihr alles, auch einen Zeiger auf eine Funktion oder einen Funktor, als Argument übergeben. Und das Flag "deferred" kann sogar eine synchrone Ausführung der Funktion bedeuten. Siehst du, ich habe dir gesagt, dass ich schlecht darin bin, solche Fragen in meinen eigenen Worten zu beantworten). Man wird verwirrt. Normalerweise belässt man alles in der Standardeinstellung und kümmert sich nicht um diese Flaggen, aber vielleicht ist das nicht richtig.

 
Igor Makanu:

HH: C#-Beispiele sind leider nicht so, mehrere Male schrieb ich in C# zuversichtlich, dass es in der Tat, analog zu C + + mit einigen Tendenz der obligatorischenVerwendung von OOP, es stellte sich heraus, dass es nicht so ist, es ist nicht C + + überhaupt, oft kann man nicht "get", um Klasse Felder ohne Casting auf Basisklasse, so dass Sie lange umständliche Strukturen verwenden müssen, im Allgemeinen, Parsing von vorgefertigten Bibliotheken für C # ist ein echtes Abenteuer!

Nun, MS hat eine sehr gute Dokumentation über Spurs. Alles wird ausführlich erklärt. Ich kann mich nicht beklagen.
 
Vict:

Nun, die Dokumentation dazu ist wenig hilfreich

Ich verstehe nicht wirklich, warum ich so ein Wunder brauche, ich kann einfach einen Zeiger auf eine Funktion in einen Thread übergeben, den ich brauche, und ihn dort ohne async( std::launch::deferred) berechnen.
Nun, zum Beispiel brauchen Sie eine Funktion, die Werte mit den aktuellen Parametern auf dem Stack berechnet, aber nicht jetzt und nicht in diesem Bereich. Sie erstellen also std::asinc, aber, hier ist das Problem, einer der Parameter ist ein Verweis oder Zeiger auf eine globale Variable, aber in der Berechnung benötigen Sie nicht den aktuellen Wert dieser Variable, sondern den, der später sein wird, deshalb werden std::lounch::asinc und std::lounch:::deferred bitmask erstelltund Sie können den Wert jetzt an die Funktion übergeben und die Berechnung später durchführen.
 
Vladimir Simakov:
Nun, zum Beispiel brauchen Sie eine Funktion, die Werte mit aktuellen Parametern auf dem Stack berechnet, aber nicht jetzt und nicht in diesem Bereich. Sie erstellen also std::asinc, aber hier ist das Problem, einer der Parameter ist ein Verweis oder Zeiger auf eine globale Variable, aber die Berechnungen benötigen nicht den aktuellen Wert dieser Variable, sondern den, der später sein wird, deshalb werden std::lounch::asinc und std::lounch::: deferred bitmasks erstellt und Sie können den Wert jetzt an die Funktion übergeben und später Berechnungen durchführen.

Ich kann also eine Funktion nehmen, die ich an async übergebe, Argumente an sie binden und sie speichern, bis es Zeit ist, sie aufzurufen (oder sie an einen anderen Thread zu senden). Welchen Unterschied macht es, ob man future oder die Ausgabe von std::bind() speichert?

Die einzige vernünftige Erklärung, die mir in den Sinn kommt, ist die manuelle Kontrolle über die Anzahl der laufenden Threads im Pool (wenn wir nicht auf die Standardeinstellung async|deferred vertrauen) - zum Beispiel, wenn das System zu sehr ausgelastet ist, hören wir auf, Aufträge mit async-Flag zu senden, und senden sie deferred.

Im Allgemeinen bin ich ein bisschen enttäuscht von async() Trägheit, ich werde meine eigenen leichtgewichtigen Thread-Pool erstellen, es scheint mir, es wird viel schneller sein.