エラー、バグ、質問 - ページ 2239

 
Stanislav Korotky:

私もMSDNを読んでいます。マイクロソフトが英語を知らないのか、自分たちのドキュメントを読んでいないのか、それとも最後の選択肢であるMQLのフラグはWinApiと似たような名前だが違う働きをするのか、説明してください。

ここから引用 - https://docs.microsoft.com/en-us/windows/desktop/api/FileAPI/nf-fileapi-createfilea

FILE_SHARE_READ -ファイルまたはデバイスに対する後続のオープン操作で読み取りアクセスを要求できるように します。そうでない場合、他のプロセスが読み取りアクセスを要求しても、ファイルまたはデバイスを開く ことはできません。

FILE_SHARE_WRITE -ファイルまたはデバイスのオープン操作で、書き込みアクセスを要求できるように します。そうしないと、他のプロセスが書き込みアクセスを要求しても、ファイルまたはデバイスを開く ことができません。

したがって、最初のプログラムは、2番目のプログラムが読むためにFILE_SHARE_READを設定する必要があるだけです。FILE_SHARE_WRITE は、2番目のプログラムもファイルに書き込むことが分かっている場合にのみ使用します。

動作の違いの例を教えてください。


提供されたリンクから、フラグの説明では、同じファイルを複数回開こうとする場合の正しい使い方がわからない。

説明のデータをもとに、下の例の4番目(hread_1)と5番目(hread_2)は有効だろうか、という質問に答えてみてください。

   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);

答えはすぐにわかる。これらの電話は無効となる

 
Stanislav Korotky:

私もMSDNを読んでいます。マイクロソフトが英語を知らないのか、自分たちのドキュメントを読んでいないのか、それとも最後の選択肢であるMQLのフラグはWinApiと似たような名前だが違う働きをするのか、説明してください。

ここから引用 - https://docs.microsoft.com/en-us/windows/desktop/api/FileAPI/nf-fileapi-createfilea

FILE_SHARE_READ -ファイルまたはデバイスに対する後続のオープン操作で読み取りアクセスを要求できるように します。そうでない場合、他のプロセスが読み取りアクセスを要求しても、ファイルまたはデバイスを開く ことはできません。

FILE_SHARE_WRITE -ファイルまたはデバイスのオープン操作で、書き込みアクセスを要求できるように します。そうしないと、他のプロセスが書き込みアクセスを要求しても、ファイルまたはデバイスを開く ことができません。

したがって、最初のプログラムは、2番目のプログラムが読むためにFILE_SHARE_READを設定する必要があるだけです。FILE_SHARE_WRITE は、2番目のプログラムもファイルに書き込むことが分かっている場合にのみ使用します。

これらのフラグの混乱を避けるために、ファイルを開くときに、これらのフラグが自分自身ではなく、他のプロセスに読み取りや書き込みを許可していることを確認してください。

 
Alexey Viktorov:

これらのフラグについて混乱を避けるために、ファイルを開く とき、これらのフラグは自分自身ではなく、他のプロセスに読み書きを許可していることを理解することが重要である。

まさにその通り、MSのドキュメントを理解しています(特に、書き込み用にファイルを開いた方が、他の人に読み込みを共有させることができる)。推奨されるフラグ付けの手法はその逆で、2番目のプロセスが書き込み中のファイルの読み取りを許可するためにwrite-shareフラグを使用します(つまり、最初のプロセスがwrite-share許可を実装していなくても、読み取りを許可するために最初のプロセスをバイパスするようなものです)。これには不自然さすら感じます。とにかく、解釈を読み解くために行ってきます。

 
Stanislav Korotky:

まさにその通り、MSのドキュメントを理解するとそうなります(特に、書き込み用にファイルを開いた人は、他の人も一緒に読めるように することができるのです)。

読むだけでなく、書くことも許される。また、共有書き込みがある場合は、各プロセスに共有書き込み権限が必要です。

スタニスラフ・コロツキー

この問題を解決するために推奨されているフラグの使用は、逆に、2番目のプロセスが書き込み中のファイルを読むことを承認する ために書き込みフラグを使用することを前提としています(つまり、最初のプロセスが書き込み共有許可を指定していないにもかかわらず、承認を上げる ことによって最初のプロセスをバイパスするようなものです)。これには不自然さすら感じます。とにかく、解釈を読み解くために行ってきます。

そして、これは間違っている。自己は、自分に対して何かを許したり、権利を上げたりすることはありません。FILE_SHARE_READ およびFILE_SHARE_WRITE フラグは、開いているファイルの属性を参照します。属性に、すでにそのファイルを使用しているプロセスからの許可が含まれていない場合、そのファイルは解放されるまで使用することができません。

そういう例もあるんです。1つ目は書き込み用にファイルを開き、他のプロセスには読み込みを許可し、2つ目はファイルを開くと、すでにそのファイルを使用している人には書き込みを禁止(許可しない)しようとします。ここでガックリくるのが...。誰が先に立ち上がり、誰が立ち去ったのか...という感じです。

 
Alexey Kozitsyn:

開発者の方に質問です。

同期機能があります。

私はそれで時々このエラーが出ます。

例えば、USDJPYでインジケータが動作し、EURGBPのシンボルでエラーが発生します。同時にターミナルにはEURGBPのチャートが開かれて います。

エラー4014には、こうあります。

システム関数の呼び出しを許可していない

どうしてでしょう?

他の呼び出しによって生成されたということです。

SymbolIsSynchronisedを呼び出す前にResetLastError()を使用します。

 
Slava:

それで、何か別の呼びかけによって生成されたのです。

SymbolIsSynchronizedを呼び出す前にResetLastError()を使用する。

はい、もうやりました...。関数のドキュメントに、エラー時にGetLastError()を呼び出す ことが明確に書かれていない場合、その関数はエラーコードをリセットしないことを意味することが判明したのです。そうだろ?

 
Slava:

また、インジケーターでこのエラーが表示される可能性のある関数を教えてほしいです。

 
A100:
私の場合、ServiceDeskは、再生できないと書いています。したがって、部屋の助けが必要です...少し後で私は何を、どのように詳細に記述します。

そのため、リクエスト#1530548では 、現在(ビルド1881)でも安定した再生ができるにもかかわらず、ServiceDeskはエラーhttps://www.mql5.com/ru/forum/1111/page1628#comment_2702870 を再現することができないのです。少し考えてみると、その理由がわかりました答えは、「遅いパソコン(タブレット)だから」です

私はケース#1952509でこの問題と同じ状況になりましたhttps://www.mql5.com/ru/forum/1111/page2124#comment_6518537

ServiceDeskも当初はエラーを再現できないと報告していた。やっぱりエラーだったんだ」と納得するのに苦労しました...。を、最後に。

サポートチーム 2018.02.10 22:35
金曜日に39チャートで弱いマシンであなたの問題を再現したようです。
今後も注目していきたい。必要であれば、追加でデータを要求します。ありがとうございます。

このようなエラーに悩まされる必要は あるのだろうか?あるいは、平和に過ごさせる......たぶん、もう二度と出てこないだろう--速いコンピュータがあれば十分だろう?

これらの疑問は、いくつかのEA/インジケータを持つ12個の他のチャートが高速コンピュータを遅いものに変えるかもしれないという文脈で生じる(そして平均的なトレーダーはまさに多くのEAを使う-例えばhttps://www.mql5.com/ru/forum/267154/page5#comment_8164924 - 82 EAが実行されている)...。あるいは、遅いパソコンでも、他の事情(ウイルス対策...)で短時間だけ遅くなることがあります。他のプログラム...またはシステム自体が一時的にほぼすべてのリソースを引き継いでいる)。

そして、まさにその100分の1の確率で、説明のつかない失敗が起こる(しかも、自然界の法則では、最も都合の悪い時に自然に起こる)のです。

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

そのため、リクエスト#1530548では 、現在(ビルド1881)でも安定した再生ができるにもかかわらず、ServiceDeskはエラーhttps://www.mql5.com/ru/forum/1111/page1628#comment_2702870 を再現することができないのです。少し考えてみると、その理由がわかりました答えは、「遅いパソコン(タブレット)だから」です

この問題については、アプリケーション#1952509でも同じ状況でしたhttps://www.mql5.com/ru/forum/1111/page2124#comment_6518537

ServiceDeskも当初はエラーを再現できないと報告していた。やっぱりエラーだったんだ」と納得するのに苦労しました...。を、最後に。

サポートチーム 2018.02.10 22:35
金曜日に39チャートで弱いマシンであなたの問題を再現したようです。
今後も注目していきたい。必要であれば、追加でデータを要求します。ありがとうございます。

このようなエラーに悩まされる必要は あるのだろうか?あるいは、そのまま静かに過ごさせるか......もう出てこないかもしれないし、速いコンピュータがあれば十分でしょう?

これらの疑問は、いくつかのEA/インジケータを持つ12個の他のチャートが高速コンピュータを遅いものに変えるかもしれないという文脈で生じる(そして平均的なトレーダーはまさに多くのEAを使う-例えばhttps://www.mql5.com/ru/forum/267154/page5#comment_8164924 - 82 EAが実行されている)...。あるいは、遅いパソコンでも、他の事情(ウイルス対策...)で短時間だけ遅くなることがあります。他のプログラム...またはシステム自体が一時的にほぼすべてのリソースを引き継いでいる)。

そして、まさにその100分の1の確率で、説明のつかない失敗が起こる(しかも、自然の法則で最もタイミングの悪い時に自然に起こる)。


弱いパソコンは持っていない。しかし、このファイルオープニングエラーも時々発生します。

 
Vladislav Andruschenko:
弱いパソコンは持っていない。しかし、このファイルを開くときのエラーも時々発生します。
あなたが普通のユーザーでなく、あなたの作品が多くの人に使われているのだから、なおさらです。