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

 
TheXpert:
書き込みハンドルにFILE_SHARE_READ、読み出しハンドルにFILE_SHARE_WRITEを 追加。

チャートに吊るすと個々にしか動作しない。中古品です。

handle_write=FileOpen("checkbox_color.txt",FILE_WRITE|FILE_SHARE_READ|FILE_TXT,';');
handle_read=FileOpen("checkbox_color.txt",FILE_READ|FILE_SHARE_WRITE|FILE_TXT,';');
 
Влад:

チャートに吊るすと個々にしか動作しない。中古品です。

すべて解決済み。中古 品。

handle_write=FileOpen("checkbox_color.txt",FILE_READ|FILE_WRITE|FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_TXT,';');
handle_read=FileOpen("checkbox_color.txt",FILE_READ|FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_TXT,';');
 
新たな疑問が生まれました。最初のチャートでは、上記のインジケータのおかげで変数が変化しています。2つ目のチャートでは、TFが変化したときのみ情報が表示され、私が望むように瞬時に表示されない。どうすれば解決するのか?PCMを押してチャートを更新するだけでは、何の役にも立たない。
 

ビルド2135が全く壊れている

#define abort(ANY) do{printf("abort, file=%s,  line=%i", __FILE__, __LINE__); Alert(1/(uint)MathAbs(0));}while(false)

#define  GENERATE_VECTOR_GROWTH_FACTOR 2
#define  GENERATE_VECTOR(NAME, REF)                                         \
   template <typename T>                                                   \
   class NAME                                                              \
   {                                                                       \
      uint sz;                                                             \
   public:                                                                 \
      T a[];                                                               \
      NAME(): sz(0) {}                                                     \
      NAME(uint count): sz(0) {                                            \
         if (ArrayResize(this.a, count) == -1)                             \
            abort(0);                                                      \
         this.sz = count;                                                  \
      }                                                                    \
      uint size()const           {return this.sz;}                         \
      void clear()               {this.sz = 0;}                            \
      void push_back(T REF value) {                                        \
         if (this.sz == ArraySize(this.a)  &&                              \
             ArrayResize(this.a, this.sz*                                  \
                           GENERATE_VECTOR_GROWTH_FACTOR+1) == -1)         \
            abort(0);                                                      \
         this.a[this.sz++] = value;                                        \
      }                                                                    \
      void reserve(uint new_cap) {                                         \
         if ((int)new_cap > ArraySize(this.a))                             \
            ArrayResize(this.a, new_cap);                                  \
      }                                                                    \
      void erase(uint pos) {                                               \
         if ( ! ArrayRemove(this.a, (int)pos, 1) )                         \
            abort(0);                                                      \
         -- this.sz;                                                       \
      }                                                                    \
   };
#define  GENERATE_VECTOR_EMPTY
GENERATE_VECTOR(vector_fund, GENERATE_VECTOR_EMPTY);
GENERATE_VECTOR(vector_ref, const &);
#undef  GENERATE_VECTOR_EMPTY
#undef  GENERATE_VECTOR_GROWTH_FACTOR
#undef  GENERATE_VECTOR

'GENERATE_VECTOR' - unexpected token, probably type is missing?    1_mystd.mqh    74    1

'GENERATE_VECTOR' - 予期しないトークン、おそらく型が見つからない? 1_mystd.mqh 75 1

GENERATE_VECTOR' - 変数はすでに定義されています 1_mystd.mqh 75 1

ずっとコンパイルしていたのですが、新しいビルドで壊れました。

 
Vict:

build 2135が壊れました。

ずっと前からコンパイルできていたのに、新しいビルドで壊れてしまった。

ごまかす、いいんです、中絶のひとつはという形で。
abort();

はコンパイラを食っていたのですが、新しいビルドでは拒否されました、何かいじったのでしょう(まあ、間違ってゼロを削除したわけではないと思いますが)。

 
MEはコンパイル時にCPUの2コア(26%)をロードすることに気づきましたが、マルチスレッドなのでしょうか、それならなぜすべてのコアをコンパイルに使わないのでしょうか、それとも資源の 無駄遣いという形でエラーになっているのでしょうか?
 
Vict:
ごまかす、いいんです、中絶のひとつはという形で。

以前はコンパイラに食べられていたのですが、新しいビルドでは拒否されたので、何かいじったのでしょう(まあ、間違って0を削除したわけではないと思います)。

ところで我々は、フルタイムの中絶、アサート...理想的には、もちろん、例外を導入するために開発者に依頼する必要があります。でも、せめて小さく始めてください。
 
Alexey Navoykov:
ところで、開発者には、インラインのアボート、アボート・・・そして理想的にはもちろん例外処理を導入してもらう必要があります。でも、せめて小さなことから始めてください。

一言入れてください、私の記憶違いでなければ、前回のMQLサイクルでお願いしました、4年ぶりですが、必要ない、こう書けばいいというリテラシーの高い人たちの騒ぎを聞く羽目になりました......。OHLCデータやインジケータへのアクセスに重大なエラーが発生した場合、プログラムの実行を 停止したい場合。kodobaseの半分に目を通しました、はい、いくつかのコードライターはこれらの条件をチェックしますが、処理はありません、私が見る最大は、問題が起こったように、エキスパートのログの出力です、心配しないで、私はこのティックで無効なデータで仕事を続けるでしょう ))) 。

SZY:痛い!今のティックの処理を簡単に止める方法が知りたい- 専門家の作業を停止するので、それは可能ですが、1つのティックの処理を停止するには、発明と孑立 - 私は、コンパイラレベルでabort()がExpertRemove()よりも難しくない実現されていることを疑う - これはすでに存在する

ZZZY: MQLでabort()を使わないEAを手続き型で書くのは、既成のサブルーチンからコードを組み立てるよりも発明に近いです。 別のTFの履歴を正しく処理できるインディケータをどう書くか、こうした一定の議論もabort()を使えば簡単に解決するのではないかと思います。このテーマについてはまだ決めていません。

 
Igor Makanu:

一言入れてください、私の記憶違いでなければ、4年前に前回のMQLサイクルでお願いしたことがあります。いづれにしても

確かに、そんなことを言い出したら、そういうリテラシーの高い人たちが「こんなのC++じゃない」と、あらゆる穴から出てきてしまいますね(笑)。

現在のティックの処理を停止させる簡単な方法が必要です。- EAの動作を停止させることは可能ですが、1ティックの処理を停止させるには、それを考案し、実行する必要があります。コンパイラレベルでは、abort()はExpertRemove()よりも複雑ではなく実装できると思います。

さて、abortもassertも上のコードと同じように実装されています。 確かに醜いですし、ログに直前のメッセージが表示されないこともあるので混乱しますが。 もしかしたら、他のエラーがあって、ログに「内部エラー」のようなものを返しているのでしょうか?少なくとも、そんなに恥ずかしくはないでしょう )

 
Alexey Navoykov:

確かに、そんなことを言い出したら、そういうリテラシーの高い人たちが「こんなのC++じゃない」と、あらゆる穴から出てきてしまいますね(笑)。

さて、abortもassertも上のコードと同じように実装されています。 確かに醜いですし、ログに直前のメッセージが表示されないこともあるので混乱しますが。 もしかしたら、他のエラーがあって、ログに「内部エラー」のようなものを返しているのかもしれませんね。少なくとも、そんなに恥ずかしくはないでしょう )

ここで@Vict が マクロ置換で OS 終了時に例外を発生させるのを手伝ってくれましたhttps://www.mql5.com/ru/forum/318246/page10#comment_12651045

一般的には有効な解決策ですが...しかし、それは醜く、嫌な感じです。)))