오류, 버그, 질문 - 페이지 239

 

차트가 방금 업데이트되었습니다. 그리고 다시 동일:

 
Yedelkin :

차트가 방금 업데이트되었습니다. 그리고 다시 동일:

급하게 서비스데스크에 글을 쓰고 단말기를 닫지 마세요
 
AlexSTAL :
급하게 서비스데스크에 글을 쓰고 단말기를 닫지 마세요
알겠습니다. 이 주제에 대한 링크를 멍청하게 복사하겠습니다.
 

방금 터미널에서 확인했습니다. 표시된 위치 의 EURUSD M1 차트 가 중단 없이 완전히 존재합니다.

차트의 컨텍스트 메뉴에서 "업데이트" 명령을 제공하십시오.

 
Renat :

방금 터미널에서 확인했습니다. 표시된 위치의 EURUSD M1 차트가 중단 없이 완전히 존재합니다.

차트의 컨텍스트 메뉴에서 "업데이트" 명령을 제공하십시오.

수동으로 업데이트했습니다. 감사합니다. 실제로 차트 작업을 하지 않기 때문에 이러한 상황에서 전문가 수준에서 회의록을 업데이트하는 방법에 대한 질문이 생겼습니다. 결국 터미널은 가지고 있는 베이스로만 작동합니다. 동기화 확인 기능을 포함하시겠습니까?
 
Renat :

방금 터미널에서 확인했습니다. 표시된 위치의 EURUSD M1 차트가 중단 없이 완전히 존재합니다.

차트의 컨텍스트 메뉴에서 "업데이트" 명령을 제공하십시오.


어딘가 떠돌아다니는 버그가 있는거 같네요....비슷한 상황이 발생하는건 저뿐만이 아니라서....
 
Yedelkin :
수동으로 업데이트했습니다. 감사합니다. 실제로 차트 작업을 하지 않기 때문에 이러한 상황에서 전문가 수준에서 회의록을 업데이트하는 방법에 대한 질문이 생겼습니다. 결국 터미널은 가지고 있는 데이터베이스에서만 작동합니다. 동기화 확인 기능을 포함하시겠습니까?

타이머에서 통신이 끊긴 시간과 재개된 시간을 기억했습니다.

이 정보가 있으면 해당 기간의 기록을 로드할 수 있습니다(이해가 되는 경우 여기에서 서버와의 동기화를 확인할 수 있음).

 

개발자 여러분, 할 말이 없습니다. 동일한 메서드에 대한 내부 호출 후 다른 개체에 대한 개체의 메서드에서 지역 변수를 "지우기"하는 찾기 어려운 문제에 직면했습니다. 아마도 이것은 중첩된 개체 함수 호출에서 일종의 최적화 때문일 수 있지만 적어도 로그에 오류가 없고 메모리 누수가 없습니다. 큰 코드를 줄 수는 없지만 원칙적으로 의미는 예제에서 명확해질 것입니다.

옵션 1

 bool operate(CAlgoBlockLogic* s1, CAlgoBlockLogic* s2) {
 bool d1 = s1.process();
 bool d2 = s2.process();
 return (d2 && d1);
}

옵션 2

 bool operate(CAlgoBlockLogic* s1, CAlgoBlockLogic* s2) {
 return (s2.process() && s1.process());
}

이론적으로 코드는 완전히 동일하게 작동해야 합니다. 하지만... 옵션은 다르게 작동합니다.

그래서. 옵션 1이 작동하지 않습니다. 디버그 파일에 쓰기 시작하면서, 나는 같은 오퍼레이트 함수의 내부 호출에서 같은 유형의 다른 객체에 대해 작동 함수에 정의된 d1 변수가 d1 변수의 값으로 덮어 쓰여진다는 것을 발견했습니다. 저것들. 짧게 말해서. 통화 후
 bool d2 = s2.process();

변수 d1은 s2.process 내부에서 작동하기 위해 내부 호출에서 발생한 값으로 값을 변경합니다 . 이 동작은 동일한 유형의 개체에 대한 정적 변수 값을 변경할 때와 같습니다. 그러나 여기서 변수에는 분명히 지역 범위 가 있습니다.

정적 변수에 대해 이 스레드에서 질문이 제기되었으며 모든 것이 명확합니다. 그러나 지역 변수 값의 불확실성은 어떻습니까?

Документация по MQL5: Основы языка / Переменные / Область видимости и время жизни переменных
Документация по MQL5: Основы языка / Переменные / Область видимости и время жизни переменных
  • www.mql5.com
Основы языка / Переменные / Область видимости и время жизни переменных - Документация по MQL5
 

"... 오퍼레이트 함수에 정의된 변수 d1은 동일한 오퍼레이트 함수의 내부 호출에서 변수 d1의 값으로 덮어쓰여집니다. 그러나 동일한 유형의 다른 객체에 대한 것입니다. 즉, 호출 후
부울 d2 = s2.process();
변수 d1은 s2.process 내부에서 작동하기 위해 내부 호출에서 발생한 값으로 값을 변경합니다."

일반적인 부작용이 있는 숨겨진 재귀처럼 보이거나 ...

 
Vigor :

이론적으로 코드는 완전히 동일하게 작동해야 합니다. 하지만... 옵션은 다르게 작동합니다.


아니요. 동일하지 않습니다.

첫 번째 옵션에서는 s1.process 및 s2.process가 무조건 호출됩니다.

두 번째 옵션에서 s1.process는 s2.process가 true를 반환하는 경우에만 호출됩니다. 이것을 "단축 상태 평가"라고 합니다.

사유: