WindowScreenShotの問題

 

こんにちは。

コスト・インジケータのWindowScreenShotは完璧に動作しています。

10:15、10:20など、5分ごとに画像を作成します。

そして

一定時間(ランダム)経過 すると動作 しませんファイルを書き込むことができません。

なぜ?

GetLastError()は、エラーを通知しません。

どうやら すべて 順調のようです


THX

 
ttechnik:

こんにちは。

コスト・インジケータのWindowScreenShotは完璧に動作しています。

10:15、10:20など、5分ごとに画像を作成します。

そして

一定時間(ランダム)経過 すると動作 しませんファイルを書き込むことができません。

なぜですか?

それは、私たちが見ることのできない、あなたのコードが壊れているからです。 私たちはあなたのコードを見ることができないので、どこが壊れているのかを伝えることはできません。
 
  ....
  WindowScreenShot(filename, X_pixels, Y_pixels); 
  int error=GetLastError();
  if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode, " T_ScreenShot FileWrite0 error: (",Symbol(),"  ",error,"): ",ErrorDescription(error));
  
  int handle = FileOpen(filename, FILE_BIN|FILE_READ); 
  if (handle>-1)
    {
     error=GetLastError();
     if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode, " T_ScreenShot FileWrite1 error: (",Symbol(),"  ",error,"): ",ErrorDescription(error));
     FileClose(handle);
    }
  
  int lasterror=GetLastError();
  if (lasterror!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode," T_ScreenShot, Schoted file open error: (",Symbol(),"  ",lasterror,"): ",ErrorDescription(lasterror));
  
RaptorUK:
それは、あなたのコードが、私たちが見ることができないので、壊れているからです。 私たちはあなたのコードを見ることができないので、どこが壊れているのかを知ることはできません。

error=0

とか、lasterror =4103, connotopen file とか。

なぜでしょうか?

 
ttechnik:

error=0

とか、lasterror =4103, connot open file とか。

なぜ?

ファイル名は ユニークですか、それとも再利用しますか?
 
RaptorUK:
ファイル名は ユニークですか、それとも再利用しますか?


ユニーク
 
ttechnik:

ユニーク
どのようにユニークにするのですか?
 
  1. エラーが発生しない限り、GetLastError()を呼び出さないでください。
     WindowScreenShot(filename, X_pixels, Y_pixels); 
      int error=GetLastError();
      if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS
    関数の戻り値とは何ですか?どのように使用するのですか?- MQL4フォーラム
    if( !WindowScreenShot(filename, X_pixels, Y_pixels) ){
      int error=GetLastError();
      Alert(TimeToStr(TimeCurrent(),TIME_SECONDS ...
    }

  2.   int handle = FileOpen(filename, FILE_BIN|FILE_READ); 
      if (handle>-1)
        {
         error=GetLastError();
    
    FileOpenが 失敗した場合、handle == -1です。エラーがないときは警告を発し、エラーがあるときは続行します。
 
RaptorUK:
どのようにユニークにするのですか?



string timestamp = TimeToStr(TimeCurrent(),TIME_SECONDS);
filename = filename + "_" + timestamp +  ".gif";
 
ttechnik:


私が見たところ、あなたの最大の問題はエラー処理です。WHRoederが すでに述べたように、あなたはエラーが発生したとき、または発生した場合、それを報告するのに不十分な仕事をしています。 例えば、WindowsScreenShot()が動作したかしないかさえチェックしていません ...WHRoederが 提案した変更を行って、再度テストしてください。 あなたのファイル名はユニークではありません。... 現在の時刻からhh:mm:ssを使用しているので、毎日、前日のファイルを上書きする可能性があり、その時にそのファイルが開いていると、4103エラーが発生する可能性があります。

代わりに ... .

string timestamp = TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS);
filename = filename + "_" + timestamp +  ".gif";

.ファイル名に日付を追加する。

 
RaptorUK:

私が見たところ、あなたの最大の問題はエラー処理です。WHRoederが すでに述べたように、あなたは、エラーが発生したとき/発生した場合の報告について、お粗末な仕事をしています。 例えば、WindowsScreenShot()が動作したかどうかさえチェックしていません ...WHRoederが 提案した変更を行って、もう一度テストしてください。 あなたのファイル名はユニークではありません。... 現在の時刻からhh:mm:ssを使用しているので、毎日、前日のファイルを上書きする可能性があり、その時にそのファイルが開いていると、4103エラーが発生する可能性があります。

代わりに ... .

...でファイル名に日付を入れる。

ラスターロールは4103、継続

エラーは0

....そして、私はMT4を終了し、それを再実行し、正常に実行されます。

After a period(random) of timeは 効きませんファイルを書き込まない。 しかし、ファイル、ファイル名はユニークです。

なぜですか?


string timestamp = TimeToStr(TimeCurrent(),TIME_DATE )+"_"+TimeToStr(TimeCurrent(),TIME_SECONDS);
  for (int i= StringLen(timestamp); i>0; i--)
    if (StringFind(timestamp,":",i)!=-1 || StringFind(timestamp,".",i)!=-1) timestamp= StringSetChar(timestamp, i, '-');
          

string filename = mappa + CharToStr(92) + CharToStr(92) + Symbol();
filename = filename + "_" + timestamp +  ".gif";

int error;
if(!WindowScreenShot(filename, X_pixels, Y_pixels))
   { 
    error=GetLastError();
    if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode, " T_ScreenShot FileWrite0 error: (",Symbol(),"  ",error,"): ",ErrorDescription(error));
   }
Alert(filename);  
int handle = FileOpen(filename, FILE_BIN|FILE_READ); 
if (handle>-1)
    {
     error=GetLastError();
     if (error!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode, " T_ScreenShot FileWrite1 error: (",Symbol(),"  ",error,"): ",ErrorDescription(error));
     FileClose(handle);
    }
else
   {  
    int lasterror=GetLastError();
    if (lasterror!=0) Alert(TimeToStr(TimeCurrent(),TIME_SECONDS)," trade_mode:", trade_mode," T_ScreenShot, Schoted file open error: (",Symbol(),"  ",lasterror,"): ",ErrorDescription(lasterror));
   }
 
ttechnik:

ラスターロールは4103、継続

エラーは0

MT4を終了して再実行すると、正常に実行されます。

一定期間(ランダム)経過動作 しないファイルを書き込まない。 しかし、ファイル、ファイル名はユニークです。

なぜですか?



ログファイルのうち、エラーが表示されている部分を表示してください。
理由: