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

 
mql5:
いいえ、32ビット端末だけの問題ではありません。しかし、32ビット端末用のソリューションは今日から使えるが、64ビット端末ではまだ256Kbのスタック制限がある。
しかし、プログラマが必要なスタックサイズをプロパティを使って手動で指定しない場合、ターミナル上のEX5はデフォルトのスタックサイズ(256Kb)で動作することになる。

ビッグサイズについて。
関数内の変数宣言(静的変数を除く)ごとにスタック上の領域が確保され、ローカル 変数のスタック上の領域確保は呼び出しごとに発生する。

したがって、64Kb のローカル変数を持つ関数であれば、3 回の呼び出しでスタックスペースは十分であり、4 回の呼び出しでスタックのオーバーフローが発生する(スタックの一部が端末内部の必要性に使用されるため)。したがって,大きなローカルデータが必要な場合は,ダイナミックメモリを使用した方がよい.関数を入力すると,ローカルに必要なメモリがシステムに確保され(new,ArrayResize),関数を終了すると,メモリが消去される(delete,ArrayFree).

詳しい説明をありがとうございました。でも、それは絶対に私の問題ではありません。足が伸びている関数はすでに見つかっており、そのようなボリューム(64Kb - 256Kb)はないので、このエラーを検出するExpert Advisorをテスト的に書いてみることにします。その時は、夜間に問題機能を持ったエキスパートをサービスデスクに派遣します。

 

もう一つ、同じ関数(CLBufferWrite())の働きについて質問(とヘルプでの説明のお願い)です。

ArrayIsSeriesフラグを設定(=true)した状態で、インジケータバッファから 直接情報を書き込むと、入力配列はどの方向に読み込まれるのでしょうか?

フラグが無視されるのでは?しかも、どの場所から読まれるのかが不明?シフトはアレイの物理的な端から数えるのでしょうか、それとも全く最初から数えるのでしょうか?

もちろん、念の ため水を吹いておきますが(ArrayIsSeries==falseで作業します)、それでも?

 
OpenCL バッファを扱う 機能は現在不完全であり、今後追加/記述していく予定です。
offset - これらの関数は、実際には OpenCL バッファの先頭からのバイト単位のオフセットで、関数に渡された配列は、ArrayIsSeries フラグを考慮せずに null アイテムからコピーされます。
 
mql5:
1) 現在、OpenCLバッファを扱う機能は未完成であり、今後追加・更新される予定です。
2. offset - これらの関数は、実際にはOpenCLバッファの先頭からのバイト単位のオフセットであり、関数に渡された配列はArrayIsSeriesフラグを考慮せずにゼロエレメントからコピーされます。

1.なんとなくそう思っていたのですが...... :)

そのため、部分的にインジケータ・バッファから 直接書き込む方法は(今のところ)ありません。

もちろん、ソースとレシーバーの両方で開始位置を移動可能にするのが良いアイデアです。こことか。

int  ArrayCopy(
   void  dst_array[],       // куда копируем
   void  src_array[],       // откуда копируем
   int   dst_start=0,       // с какого индекса пишем в приемник
   int   src_start=0,       // с какого индекса копируем из источника
   int   cnt=WHOLE_ARRAY    // сколько элементов
   );

インデックス(方向と単位(バイト/要素))については、ヘルプでもっと丁寧に説明してください。:)))

--

ご返信ありがとうございます!機能向上のためにご尽力いただき、本当に感謝しております。

宴会が続くのを気長に楽しみに待ってます。とりあえず、短剣の刃の上で踊るしかないですね。:)

 

Build 597 x64、インストールしたところです。

2012.02.23 21:43:24 OpenCLTest (EURUSD,M30) SaveBitmapToFile エラー 'Mandelbrot.bmp' を開いています。
2012.02.23 21:43:13 OpenCLTest (EURUSD,M30) SaveBitmapToFile エラー 'Mandelbrot.bmp' を開いています。
2012.02.23 21:43:12 OpenCLTest (EURUSD,M30) SaveBitmapToFile エラー 'Mandelbrot.bmp' を開いています。
2012.02.23 21:43:10 OpenCLTest (EURUSD,M30) SaveBitmapToFile エラー 'Mandelbrot.bmp' を開いています。
2012.02.23 21:43:09 OpenCLTest (EURUSD,M30) SaveBitmapToFile エラー 'Mandelbrot.bmp' を開いています。
2012.02.23 21:43:08 OpenCLTest (EURUSD,M30) SaveBitmapToFile エラー 'Mandelbrot.bmp' を開いています。
2012.02.23 21:43:07 OpenCLTest (EURUSD,M30) SaveBitmapToFile エラー 'Mandelbrot.bmp' を開いています。
2012.02.23 21:43:06 OpenCLTest (EURUSD,M30) SaveBitmapToFile エラー 'Mandelbrot.bmp' を開いています。

こんなことは今までなかったことです。

// Win7 x64

 
MetaDriver:

Build 597 x64、インストールしたところです。

以前はこんなもんじゃなかったんですけどね。

// Win7 x64の場合。

サンプルを再コンパイルしてみてください。確認したところ、私の場合はうまくいきました。
 
Renat:
サンプルを再コンパイルしてみてください。確認したところ、私の場合はうまくいきました。

もう100回くらい再コンパイルしてるんだけど、もう一回再起動しよ。

 
MetaDriver:

...もう一度、再起動する

いや、役に立たなかった。

レナート

......確認しました - 私には動作しています。

私にも効果がありますが、10回や40回に1回は同じようなくだりが出てきます。

2012.02.23 23:44 OpenCLTest (EURUSD,M30) SaveBitmapToFile エラー 'Mandelbrot.bmp' を開いています。
2012.02.23 23 16:16:43 OpenCLTest (EURUSD,M30) SaveBitmapToFile エラー 'Mandelbrot.bmp' を開いています。
2012.02.23 23 16:16:42 OpenCLTest (EURUSD,M30) SaveBitmapToFile エラー 'Mandelbrot.bmp' を開いています。
2012.02.23 23 16:16:36 OpenCLTest (EURUSD,M30) SaveBitmapToFile エラー 'Mandelbrot.bmp' を開いています。
 
MetaDriver:

いや、役に立たなかった。

これは私にも有効ですが、10~40サイクルに一度、このくだりが出てきます。

も発見されました。

これは、指定されたファイルが同期を取らずに2つの異なるスレッドで処理されているためで、時折ファイルが ロックされることがあります。

  1. スクリプトスレッドは1秒間に10回ファイルを上書きします(カードの速度に依存します)。
  2. チャートは、スクリプトの要求に応じて、独自のスレッドで画像を再読み込みする

画像を使った例は、あくまでOpenCLの動作原理を示すために作ったものなので、問題ないでしょう。

Документация по MQL5: Файловые операции / FileMove
Документация по MQL5: Файловые операции / FileMove
  • www.mql5.com
Файловые операции / FileMove - Документация по MQL5
 
Renat:

画像付きの例は、あくまでOpenCLの動作原理を示すために作ったものなので、問題ありません。

そうですね。 それに、どうせなら、GraphLabelオブジェクトのバッファに直接転送するようにしましょう。:)