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

削除済み  
Дмитрий Касаткин:
WebターミナルはこのMetaTrader Serverではサポートされていませんと表示され、プラットフォームにアクセスできないのですが。サーバーを更新するためにあなたのブローカーに連絡してください、プラットフォームは、接続がないと言いますか?
ご利用のブローカーはウェブターミナルに 対応していません。ターミナルがコンピュータにインストールされていて、接続がない場合、ポート443が以前閉じられて いたなら、それを開く必要があります。
 
開発者の皆様、OnDeinit関数の 順番、つまりオブジェクトや他の変数の削除、メモリのクリアなどの順番はどうなっているのでしょうか?
 
coderex:
開発者の皆様、OnDeinit関数の 操作の順番、つまりオブジェクトや他の変数の削除、メモリクリアなどの順番はどうなっていますか?

OnDeinitはMQL4/5の普通の関数で、ある特定の状況で呼び出されるものです。こうやってプログラムするから、こうなる。

もう少し具体的に質問してください。具体的にどのようなことに興味があるのでしょうか?

 
Slawa:

OnDeinitはMQL4/5の普通の関数で、ある特定の状況で呼び出されるものです。こうやってプログラムするから、こうなる。

もう少し具体的に質問してください。具体的にどのようなことに興味があるのでしょうか?

明示的に削除された(割り当てられたメモリに作成された)オブジェクトでは、すべてがクリアされます。気になるのは、メモリを解放して、無人メモリに作られたオブジェクトを削除する処理です。

すなわち、例えば、2つのオブジェクトと基本型の変数がある。

class CFirst {...};
class CSecond {...};

int iVolume = 100;
CFirst first_obj;
CSecond *second_obj;

int OnInit(void) {
   second_obj = new CSecond();
// текст функции OnInit
}
void OnDeinit(const int reason) {
   if(CheckPointer(second_obj == POINTER_DYNAMIC)
      delete second_obj;
}

プログラム削除時のメモリ解放と全オブジェクトの削除の順番がどうなるのかに興味があります。

 
Slawa:

...

端末がフリーズするのはどんなとき?- 端末がハングアップするような状況は普通にあるようです。

見たところ、必ずハングアップ(不定期にハングアップ)するようです。

1.サーバーに接続中。

2.P1.アカウント切り替え時。

3.端末起動 中。

前回は、起動時に端末がフリーズしてしまいました。タスクマネージャーを見ると、端末が1バイトずつメモリを食っていき、数分後には8GBのメモリを全部食ってしまい、端末と一緒にオペレーティングシステムもハングアップしてしまいました。システムユニットの「リセット」ボタンを押さなければならなかった。

コンピュータを再起動した後、ターミナルを起動すると、ハングアップの歴史が繰り返され、ターミナルと一緒に必死で起こそうとしても、システムは反応しなくなりました。

コンピュータを再起動した後、ターミナルの設定ファイルをすべて削除し、ターミナルを起動すると、再びハングアップする履歴が表示されました。

パソコンを再起動した後、トレードサーバーの履歴ファイルをすべて削除したところ、3分ほど考えただけでモバイルパソコンが正常に動作するようになりました。

ビルドからビルドまで、ターミナルがハングアップする。Win10x64です。

 
Joo Zepper:

端末が電話を切ることができるのはいつですか?- 端末がハングアップするはずの正常な状況があるようです。

私の観察によると、次のような場合に必ず端末がハングする(不定期にハングする)ようです。

1.サーバーに接続中。

2.P1.アカウント切り替え時。

3.端末起動 中。

前回は、起動時に端末がフリーズしてしまいました。タスクマネージャーを見ると、端末が1バイトずつメモリを食っていき、数分後には8Gbのメモリを全部食ってしまい、端末と一緒にオペレーティングシステムもハングアップしてしまいました。システムユニットの「リセット」ボタンを押さなければならなかった。

コンピュータを再起動した後、ターミナルを起動すると、ハングアップの歴史が繰り返され、ターミナルと一緒に必死で起こそうとしても、システムは応答しなくなりました。

コンピュータを再起動した後、ターミナルの設定ファイルをすべて削除し、ターミナルを起動すると、再びハングアップする履歴が表示されました。

パソコンを再起動した後、トレードサーバーの履歴ファイルをすべて削除したところ、3分ほど考えただけでモバイルパソコンが正常に動作するようになりました。

ビルドからビルドまで、ターミナルがハングアップする。Win10x64です。

同じ風、ターミナルは管理者のみで実行し、メタエディタのファイルも全て管理者から実行、問題なし。
 

このようなコードに遭遇するのは初めてなので、経験豊富な専門家に、コードをパーツに分割し、ファイルを正しくインクルードする方法を聞いています

以下はその一例です。

class WL : public C_Object
  {
private:
   MqlTick           tick;
   struct STRUCT_SYMBOL // Структура символа
     {    
      bool              TRADING_IS_ALLOWED;      // Обновлять
      double            INDIKATOR_VOLUME;        // Обновлять
     };
   struct STRUCT_WATCH_LIST // Структура сохраненных листов
     {
      string            NAME_LIST;
     };
   STRUCT_WATCH_LIST WatchList[];
   STRUCT_SYMBOL     SymbolMass[];
}

つまり、あるクラスは他のクラスを継承し、構造体を持ちます。例の構造体は省略しましたが、その構造体の配列を操作するメソッドが存在します

私はこの方法を40~50個、あるいはそれ以上持っています。

Expert Advisor 自体に1万~2万行のコードを作って後で検索しづらくならないように、各メソッドをインクルードファイルに移動するか、他の方法でコード構造を整えたいと考えています。

今のところ、構造体の配列を参照で送るしかないようです

のように

func(STRUCT_SYMBOL & str)

と思われます。

私たちにできることは何だろう?

 
coderex:

明示的に削除されたオブジェクト(割り当てられたメモリに作成されたもの)を削除する処理は理解できました。メモリの解放や 自動メモリに作成されたオブジェクトの削除などの処理に興味があります。

例えば、2つのオブジェクトと基本型の変数があるとします。

プログラムを削除する際、メモリの解放と全オブジェクトの削除はどのような順番で行われるのか知りたいです。

OnDeinitはこれとは関係ない。

ドキュメントをお読みになりましたか?

 
Vladimir Pastushak:
ターミナルはadminからのみ実行し、メタエディタのファイルもすべてadminからで、問題ありません。
とか、端末に十字架のついた帽子と金のリンゴと杖を持たせて、全ロシアの最も神聖な王と呼ばせるべきとか、管理者から?
 
Vladimir Pastushak:

このようなコードに遭遇するのは初めてなので、経験豊富な専門家に、コードをパーツに分割し、ファイルを正しくインクルードする方法を聞いています

以下はその一例です。

つまり、あるクラスは他のクラスを継承し、構造体を持ちます。例の構造体は省略しましたが、その構造体の配列を操作するメソッドが存在します

私はこの方法を40~50個、あるいはそれ以上持っています。

Expert Advisor 自体に1万~2万行のコードを作って後で検索しづらくならないように、各メソッドをインクルードファイルに移動するか、他の方法でコード構造を整えたいと考えています。

今のところ、構造体の配列を参照で送ることくらいしか思いつきません

のように

これがベストな選択とは思えません。

どうしたらいいのでしょうか?

クラスが巨大な場合は、クラスごとにリストを作成し、このクラスのオブジェクトが使用されるコードでは、#includeを通じてクラスのリストを含めるとよいでしょう。構造体や関数ライブラリも同様です。クラスや構造物がキャップレスでない場合は、1つのリストに含めることができます。また、一般的な定義やマクロのリストを作成することも可能です。

私は自分の取引システムで15-20のリストと、インターフェース用の.bmpと.gifのディレクトリを使用したことがあります。すべてのリスティングを別々のディレクトリに配信しています。エラーをキャッチするときやバージョンアップするときの操作が楽になりました。