오류, 버그, 질문 - 페이지 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 , ';' );
 
새로운 질문이 생겼습니다. 첫 번째 그래프에서는 위의 칠면조 덕분에 변수를 변경했습니다. 두 번째 차트에서는 원하는 대로 즉시 정보가 표시되지 않고 기간을 변경할 때만 정보가 표시됩니다. 어떻게 해결할 수 있습니까? RMB 키를 누른 상태에서 새로고침으로 차트를 업데이트하는 것은 도움이 되지 않습니다.
 

빌드 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 :

빌드 2135는 일반적으로 손상되었습니다.

백년 동안 컴파일되고 새 빌드에서 깨졌습니다.

나는 거짓말을하고 있습니다. 모든 것이 괜찮습니다. 낙태 중 하나에서 그는 다음과 같은 형식으로 호출되었습니다.
abort();

컴파일러는 그것을 먹어 치웠지만 새 빌드에서 거부했습니다. 아마도 무언가가 수정되었을 것입니다(글쎄, 내가 실수로 0을 삭제했을 가능성은 거의 없음).

 
컴파일할 때 ME가 프로세서의 2개 코어(26%)를 로드할 때 문제가 발생합니다. 이것은 멀티스레딩입니다. 그러면 컴파일에 모든 코어를 사용하지 않는 이유가 무엇입니까? 아니면 리소스를 비합리적으로 사용 하는 형태의 오류입니까?
 
Vict :
나는 거짓말을하고 있습니다. 모든 것이 괜찮습니다. 낙태 중 하나에서 그는 다음과 같은 형식으로 호출되었습니다.

컴파일러는 그것을 먹어 치웠지만 새 빌드에서 거부했습니다. 아마도 무언가가 수정되었을 것입니다(글쎄, 내가 실수로 0을 삭제했을 가능성은 거의 없음).

그건 그렇고, 우리는 개발자에게 풀 타임 낙태, 주장을 도입하도록 요청해야합니다 ... 이상적으로는 물론 예외가 있습니다. 그러나 최소한 작게 시작하십시오.
 
Alexey Navoykov :
그건 그렇고, 우리는 개발자에게 풀 타임 낙태, 주장을 도입하도록 요청해야합니다 ... 이상적으로는 물론 예외가 있습니다. 그러나 최소한 작게 시작하십시오.

한마디로 말하면, 내가 틀리지 않았다면 나는 MQL 연구의 마지막주기에서 이것을 요구했습니다. 4 년이 지났습니다. 나는 글을 읽는 사람들의 holivar를 들어야했습니다. 그들은 예, 당신은하지 않습니다 필요, 이렇게 작성 ... 글쎄, 일반적으로 모든 것이 평소와 같지만 OHLC 데이터 또는 표시기에 액세스하는 데 치명적인 오류가있는 상태에서 프로그램 실행을 중단하는 방법 ... 코드베이스 바닥을 살펴 보았습니다. , 예, 일부 코드 작성자는 이러한 조건을 확인하지만 처리가 없으며 전문가의 로그에 정중한 표정으로 출력됩니다. 마치 문제가 발생했다고 말하는 것처럼 일반적으로 걱정하지 마십시오. 잘못된 데이터로 계속 작업할 것입니다. 이 틱 )))

추신: 끓어오르면 현재 틱 처리를 중지하는 쉬운 방법이 필요합니다! - 그것은 당신이 Expert Advisor의 작업을 멈출 수 있다는 것을 의미하지만, 한 틱 처리를 멈추기 위해 생각하고 그것을 벗어나십시오 - 나는 컴파일러 수준에서 abort()가 ExpertRemove()보다 더 복잡하게 구현되지 않는다고 생각합니다. 이미 존재 함

ZYZY: abort() 없이 MQL에 대한 Expert Advisor를 절차적 스타일로 작성하는 작업은 이미 만들어진 서브루틴에서 코드를 추가하는 것보다 발명에 더 가깝습니다. 올바르게 로드할 수 있는 표시기를 작성하는 방법에 대한 이러한 지속적인 논의는 다른 TF를 사용하는 히스토리도 abort()를 사용하여 해결하기가 더 쉬울 것입니다 - 아직 그것에 대해 생각하지 않았습니다

 
Igor Makanu :

한마디로 말하면, 내가 틀리지 않았다면 나는 MQL 연구의 마지막주기에서 이것을 요청했습니다. holivar가 글을 읽고있는 사람들의 진실을 들어야 한 지 4 년이 지났습니다. 그들은 예, 당신은하지 않습니다 필요합니다, 이렇게 작성하십시오 ... 글쎄, 일반적으로 모든 것이 평소와 같습니다.

당신은 조금 말을 더듬을 것입니다. 이 글을 읽을 줄 아는 사람은 즉시 모든 균열에서 기어나와 "이것은 당신을 위한 C ++가 아닙니다"라고 말할 것입니다)

현재 틱 처리를 중지하는 쉬운 방법이 필요합니다! - 그것은 당신이 Expert Advisor의 작업을 멈출 수 있다는 것을 의미하지만, 한 틱 처리를 멈추기 위해 생각하고 그것을 벗어나십시오 - 나는 컴파일러 수준에서 abort()가 ExpertRemove()보다 더 복잡하게 구현되지 않는다고 생각합니다. 이미 존재 함

글쎄, 여기 위의 코드에서와 같이 0으로 나누는 것과 똑같은 방식으로 abort와 assert를 모두 구현했습니다. 이것은 확실히 추악하고 때로는 혼란 스럽습니다. 왜냐하면 나는 항상 로그에서 이전 메시지를 알아차리지 못합니다. 로그에 "내부 오류"와 같은 것을 제공하는 다른 오류가 있습니까? 적어도 그렇게 부끄럽지는 않을 것입니다)

 
Alexey Navoykov :

당신은 조금 말을 더듬을 것입니다. 이 글을 읽을 줄 아는 사람은 즉시 모든 균열에서 기어나와 "이것은 당신을 위한 C ++가 아닙니다"라고 말할 것입니다)

글쎄, 여기 위의 코드에서와 같이 0으로 나누는 것과 똑같은 방식으로 abort와 assert를 모두 구현했습니다. 이것은 확실히 추악하고 때로는 혼란 스럽습니다. 왜냐하면 나는 항상 로그에서 이전 메시지를 알아차리지 못합니다. 로그에 "내부 오류"와 같은 것을 제공하는 다른 오류가 있습니까? 적어도 그렇게 부끄럽지는 않을 것입니다)

여기 @Vict 는 매크로 대체를 통해 OS 종료와 함께 예외를 만드는 데 도움을 주었습니다. https://www.mql5.com/en/forum/318246/page10#comment_12651045

, 일반적으로 실행 가능한 솔루션이지만 ...하지만 소름 끼치고 역겨워 보입니다! )))

사유: