Fehler, Irrtümer, Fragen - Seite 2239

 
Stanislav Korotky:

Ich lese auch MSDN. Erklären Sie, ist es Microsoft kann nicht Englisch oder sie nicht lesen ihre Dokumentation selbst, oder die letzte Option - die Flaggen in MQL sind ähnlich wie WinApi benannt, aber anders funktionieren?

Entnommen von hier - https://docs.microsoft.com/en-us/windows/desktop/api/FileAPI/nf-fileapi-createfilea

FILE_SHARE_READ -Ermöglicht, dass nachfolgende Operationen zum Öffnen einer Datei oder eines Geräts Lesezugriff anfordern.Andernfalls können andere Prozesse die Datei oder das Gerät nicht öffnen, wenn sie Lesezugriff anfordern.

FILE_SHARE_WRITE -Ermöglicht, dass nachfolgende Operationen zum Öffnen einer Datei oder eines Geräts Schreibzugriff anfordern.Andernfalls können andere Prozesse die Datei oder das Gerät nicht öffnen, wenn sie Schreibzugriff anfordern.

Daher muss das erste Programm nur FILE_SHARE_READ setzen, damit das zweite Programm lesen kann. FILE_SHARE_WRITE nur, wenn Sie wissen, dass das zweite Programm auch in die Datei schreiben wird.

Können Sie ein Beispiel für den Unterschied im Verhalten nennen?


Aus dem angegebenen Link geht nicht hervor, wie die Flaggen korrekt zu verwenden sind, wenn man versucht, dieselbe Datei mehrmals zu öffnen.

Versuchen Sie auf der Grundlage der Daten in Ihrer Beschreibung die Frage zu beantworten, ob die vierte (hread_1) und die fünfte (hread_2) im folgenden Beispiel gültig sind.

   HANDLE hwrite     =::CreateFile(L"test.txt", GENERIC_WRITE,FILE_SHARE_READ,                   nullptr,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,nullptr);

   HANDLE hread_fail =::CreateFile(L"test.txt", GENERIC_READ, FILE_SHARE_READ,                   nullptr,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,nullptr);
   HANDLE hread_ok   =::CreateFile(L"test.txt", GENERIC_READ, FILE_SHARE_WRITE,                  nullptr,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,nullptr);

   HANDLE hread_1    =::CreateFile(L"test.txt", GENERIC_READ, FILE_SHARE_WRITE,                  nullptr,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,nullptr);
   HANDLE hread_2    =::CreateFile(L"test.txt", GENERIC_READ, FILE_SHARE_WRITE|FILE_SHARE_READ,  nullptr,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,nullptr);

Ich sage Ihnen gleich die Antwort: Diese Anrufe werden ungültig sein

 
Stanislav Korotky:

Ich lese auch MSDN. Erklären Sie, ist es Microsoft kann nicht Englisch oder sie nicht lesen ihre Dokumentation selbst, oder die letzte Option - die Flaggen in MQL sind ähnlich wie WinApi benannt, aber anders funktionieren?

Entnommen von hier - https://docs.microsoft.com/en-us/windows/desktop/api/FileAPI/nf-fileapi-createfilea

FILE_SHARE_READ -Ermöglicht, dass nachfolgende Operationen zum Öffnen einer Datei oder eines Geräts Lesezugriff anfordern.Andernfalls können andere Prozesse die Datei oder das Gerät nicht öffnen, wenn sie Lesezugriff anfordern.

FILE_SHARE_WRITE -Ermöglicht, dass nachfolgende Operationen zum Öffnen einer Datei oder eines Geräts Schreibzugriff anfordern.Andernfalls können andere Prozesse die Datei oder das Gerät nicht öffnen, wenn sie Schreibzugriff anfordern.

Daher muss das erste Programm nur FILE_SHARE_READ setzen, damit das zweite Programm lesen kann. FILE_SHARE_WRITE nur, wenn Sie wissen, dass das zweite Programm auch in die Datei schreiben wird.

Um Verwirrung mit diesen Flags zu vermeiden, stellen Sie einfach sicher, dass diese Flags beim Öffnen einer Datei anderen Prozessen das Lesen und/oder Schreiben erlauben, nicht uns selbst.

 
Alexey Viktorov:

Um Verwirrung über diese Flags zu vermeiden, ist es wichtig zu verstehen, dass wir, wenn wir eine Datei öffnen, diese Flags anderen Prozessen erlauben zu lesen und/oder zu schreiben, nicht uns selbst.

Das ist genau das, was ich sage, genau so verstehe ich die MS-Dokumentation (insbesondere kann derjenige, der eine Datei zum Schreiben öffnet, anderen erlauben, sie gemeinsam zu lesen). Die empfohlene Markierungstechnik bewirkt das Gegenteil - der zweite Prozess verwendet die Schreibfreigabe, um das Lesen der zu schreibenden Datei zu autorisieren (d.h. er umgeht quasi den ersten Prozess, um das Lesen zu autorisieren, obwohl der erste Prozess keine Schreibfreigabe implementiert hat). Das klingt sogar unnatürlich. Wie auch immer, ich gehe jetzt und lese die Interpretationen.

 
Stanislav Korotky:

Das ist genau das, was ich sage, und so verstehe ich auch die MS-Dokumentation (insbesondere, dass derjenige, der eine Datei zum Schreiben öffnet , anderen erlauben kann, sie gemeinsam zu lesen).

Nicht nur Lesen kann erlaubt sein, sondern auch Schreiben. Und wenn gemeinsam geschrieben werden soll, sollte jeder Prozess eine gemeinsame Schreibberechtigung haben.

Stanislav Korotky:

Die Verwendung von Flags, die empfohlen wird, um dieses Problem zu lösen, geht vom Gegenteil aus - daß der zweite Prozeß das write-flag benutzt, um sich selbst zu autorisieren, die zu schreibende Datei zu lesen (d.h. er umgeht quasi den ersten Prozeß, indem er seine Autorisierung erhöht, obwohl der erste Prozeß keine Schreibfreigabe angegeben hat). Das klingt sogar unnatürlich. Wie auch immer, ich gehe jetzt und lese die Interpretationen.

Und das ist falsch. Das Selbst lässt niemals etwas zu oder erhebt irgendwelche Rechte auf sich selbst. Die Flags FILE_SHARE_READ und FILE_SHARE_WRITE beziehen sich auf Attribute einer geöffneten Datei. Wenn die Attribute keine Erlaubnis des Prozesses enthalten, der die Datei bereits verwendet, kann die Datei nicht verwendet werden, bis sie freigegeben wird.

So funktioniert es in diesen Beispielen: Die erste geöffnete Datei zum Schreiben, erlauben andere Prozesse zu lesen, und die zweite, wenn Sie es öffnen, versucht zu verbieten (nicht zulassen), um die eine, die bereits mit der Datei zu schreiben. Und jetzt kommt der Knackpunkt... Es geht darum, wer zuerst aufgestanden ist, wer weggeht...

 
Alexey Kozitsyn:

Frage an die Entwickler.

Es gibt eine Synchronisationsfunktion:

Ich erhalte manchmal diesen Fehler:

D.h. der Indikator läuft auf USDJPY, und ich bekomme einen Fehler mit EURGBP Symbol. Gleichzeitig ist im Terminal ein offenes EURGBP-Chart zu sehen.

Der Fehler 4014 besagt, dass:

Systemfunktion darf nicht aufgerufen werden

Wie kann das sein?

Es könnte sein, dass er durch einen anderen Aufruf erzeugt wurde.

Verwenden Sie ResetLastError() vor dem Aufruf von SymbolIsSynchronised

 
Slava:

Sie wurde also durch einen anderen Anruf erzeugt.

Verwenden Sie ResetLastError() vor dem Aufruf von SymbolIsSynchronized

Ja, das habe ich bereits... Es hat sich herausgestellt, dass, wenn in der Funktionsdokumentation nicht eindeutig steht, dass GetLastError() im Falle eines Fehlers aufgerufen werden muss, dies bedeutet, dass die Funktion den Fehlercode nicht zurücksetzt. Oder?

 
Slava:

Außerdem würde ich gerne wissen, welche Funktionen möglicherweise diesen Fehler im Indikator verursachen könnten?

 
A100:
In meinem Fall schreibt ServiceDesk nun, dass es nicht abspielen kann... dementsprechend wird die Hilfe des Raumes benötigt ... ein wenig später werde ich im Detail beschreiben, was und wie

Also auf Anfrage #1530548 kann ServiceDesk den Fehler https://www.mql5.com/ru/forum/1111/page1628#comment_2702870 nicht reproduzieren, obwohl ich sogar jetzt (in Build 1881) eine konstante Wiedergabe habe. Nach einigem Nachdenken habe ich herausgefunden, warum! Die Antwort lautet: weil ich einen langsamen Computer (Tablet) habe.

Ich hatte die gleiche Situation im Fall #1952509 mit diesem Problem https://www.mql5.com/ru/forum/1111/page2124#comment_6518537

Auch ServiceDesk meldete zunächst, dass es den Fehler nicht reproduzieren konnte. Es hat mich viel Mühe gekostet, mich davon zu überzeugen, dass es sich doch um einen Fehler handelt... am Ende:

Support-Team 2018.02.10 22:35
Es scheint, dass ich Ihr Problem bereits am Freitag auf einem schwachen Rechner mit 39 Karten reproduzieren konnte.
Wir werden sie im Auge behalten. Wird bei Bedarf zusätzliche Daten anfordern. Ich danke Ihnen.

Das wirft die Frage auf: Ist es überhaupt notwendig, sich mit solchen Fehlern zu beschäftigen? Oder lassen Sie sie einfach in Ruhe ihr Leben leben ... vielleicht tauchen sie nicht wieder auf - ein schneller Computer reicht doch, oder?

Diese Fragen stellen sich vor dem Hintergrund, dass ein Dutzend anderer Charts mit mehreren EAs/Indikatoren einen schnellen Computer in einen langsamen verwandeln können (und ein durchschnittlicher Trader verwendet genau eine Menge EAs - zum Beispiel https://www.mql5.com/ru/forum/267154/page5#comment_8164924 - 82 EAs laufen)... Oder auch ein langsamer Computer kann aufgrund anderer Umstände (Antivirus... andere Programme... oder das System selbst hat vorübergehend fast alle Ressourcen übernommen).

Und dann wird genau dieses unerklärliche 1:100 Scheitern eintreten (und nach den Gesetzen der Natur geschieht es natürlich zum ungünstigsten Zeitpunkt).

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2016.08.03
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
A100:

Also auf Anfrage #1530548 kann ServiceDesk den Fehler https://www.mql5.com/ru/forum/1111/page1628#comment_2702870 nicht reproduzieren, obwohl ich sogar jetzt (in Build 1881) eine konstante Wiedergabe habe. Nach einigem Nachdenken habe ich herausgefunden, warum! Die Antwort lautet: weil ich einen langsamen Computer (Tablet) habe.

Die gleiche Situation war in Antrag Nr. 1952509 für dieses Problem https://www.mql5.com/ru/forum/1111/page2124#comment_6518537

Auch ServiceDesk meldete zunächst, dass es den Fehler nicht reproduzieren konnte. Es hat mich viel Mühe gekostet, mich davon zu überzeugen, dass es sich doch um einen Fehler handelt... am Ende:

Support-Team 2018.02.10 22:35
Es scheint, dass ich Ihr Problem bereits am Freitag auf einem schwachen Rechner mit 39 Karten reproduzieren konnte.
Ich werde sie im Auge behalten. Wird bei Bedarf zusätzliche Daten anfordern. Ich danke Ihnen.

Das wirft die Frage auf: Ist es überhaupt notwendig, sich mit solchen Fehlern zu beschäftigen? Oder lassen Sie sie einfach in Ruhe ihr Leben leben ... vielleicht tauchen sie nicht wieder auf - ein schneller Computer reicht doch, oder?

Diese Fragen stellen sich vor dem Hintergrund, dass ein Dutzend anderer Charts mit mehreren EAs/Indikatoren einen schnellen Computer in einen langsamen verwandeln können (und ein durchschnittlicher Trader verwendet genau eine Menge EAs - zum Beispiel https://www.mql5.com/ru/forum/267154/page5#comment_8164924 - 82 EAs laufen)... Oder auch ein langsamer Computer kann aufgrund anderer Umstände (Antivirus...) kurzzeitig langsam werden. andere Programme... oder das System selbst hat vorübergehend fast alle Ressourcen übernommen).

Und dann tritt genau dieses unerklärliche 1:100 Versagen ein (und nach den Gesetzen der Natur geschieht es natürlich zum ungünstigsten Zeitpunkt).


Ich habe keinen schwachen Computer. Aber dieser Fehler beim Öffnen von Dateien tritt auch von Zeit zu Zeit auf.

 
Vladislav Andruschenko:
Ich habe keinen schwachen Computer. Aber dieser Fehler beim Öffnen einer Datei tritt auch von Zeit zu Zeit auf.
Dies gilt umso mehr, als Sie kein gewöhnlicher Nutzer sind und Ihre Arbeit von vielen, vielen Menschen genutzt wird.
Grund der Beschwerde: