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

 
MetaDriver :
ObjSetInteger(id, Name, OBJPROP_BACK, 거짓 );
시험을 마친. 형식은 실제로 후퇴하지만 가장 추악한 방식으로 수행됩니다. 막대 뒤에도 실패합니다. 그리고 작업은 약간 다릅니다. 양식 자체가 그래프 및 기타 양식의 맨 위에 있는 동안 양식에 텍스트를 표시하기만 하면 됩니다.
 
C-4 :
시험을 마친. 형식은 실제로 후퇴하지만 가장 추악한 방식으로 수행됩니다. 막대 뒤에도 실패합니다. 그리고 작업은 약간 다릅니다. 양식 자체가 그래프 및 기타 양식의 맨 위에 있는 동안 양식에 텍스트를 표시하기만 하면 됩니다.

개체는 생성된 순서대로 표시되며, 순서를 변경해야 하는 경우 개체의 데이터를 저장하고 원하는 순서로 다시 생성해야 합니다.

아니면 버그라도 되나요?

 
C-4 :
시험을 마친. 형식은 실제로 후퇴하지만 가장 추악한 방식으로 수행됩니다. 막대 뒤에서도 실패합니다. 그리고 작업은 약간 다릅니다. 양식 자체가 그래프 및 기타 양식의 맨 위에 있는 동안 양식에 텍스트를 표시하기만 하면 됩니다.
그래픽 개체의 생성 순서만 고려하면 됩니다 . 더 낮아야 할 것이 먼저 생성되어야 합니다.
 
tol64 :
그래픽 개체의 생성 순서만 고려하면 됩니다 . 더 낮아야 하는 것이 먼저 생성되어야 합니다.

네, 그게 제일 먼저 생각났습니다. 순서 변경 - 동일한 결과. 그러나 기적은 일어나지 않습니다. 지금은 작업 초안을 가져 와서 OBJ_EDIT 를 배치하려고했지만 제대로 작동했습니다. 즉, 양식 위에 표시됩니다. 일반적으로 일종의 지옥. 내가 고려하지 않았거나 무언가를 잊어 버린 것이 분명합니다. 그래도 다음에는 이 갈퀴를 밟지 않도록 알아내고 싶다. 다음은 테스트를 위한 OnInit() 코드입니다.

 //+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   
   ObjectCreate ( 0 , "cell" , OBJ_RECTANGLE_LABEL , 0 , 0 , 0 );
   ObjectSetInteger ( 0 , "cell" , OBJPROP_XDISTANCE , 15 );
   ObjectSetInteger ( 0 , "cell" , OBJPROP_YDISTANCE , 60 );
   ObjectSetInteger ( 0 , "cell" , OBJPROP_BGCOLOR , clrWhite );
   ObjectSetInteger ( 0 , "cell" , OBJPROP_BORDER_TYPE , BORDER_FLAT );
   ObjectSetInteger ( 0 , "cell" , OBJPROP_BORDER_COLOR , clrBlack );
   ObjectSetInteger ( 0 , "cell" , OBJPROP_BACK , false );
   //ObjectSetInteger(0, "cell", OBJPROP_SELECTED, false);
   
   ObjectCreate ( 0 , "edittext" , OBJ_EDIT , 0 , 30 , 30 );
   ObjectSetInteger ( 0 , "edittext" , OBJPROP_XDISTANCE , 40 );
   ObjectSetInteger ( 0 , "edittext" , OBJPROP_YDISTANCE , 50 );
   ObjectSetInteger ( 0 , "edittext" , OBJPROP_BGCOLOR , clrNONE );
   ObjectSetInteger ( 0 , "edittext" , OBJPROP_BORDER_COLOR , clrNONE );
   //ObjectSetInteger(0, "edittext", OBJPROP_WIDTH, 3);
   ObjectSetString ( 0 , "edittext" , OBJPROP_TEXT , "edit text" );
   ObjectSetInteger ( 0 , "edittext" , OBJPROP_BACK , false );
   
   
   EventSetTimer ( 1 );
//---
   return ( INIT_SUCCEEDED );
  }
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов - Документация по MQL5
 
C-4 :

네, 그게 제일 먼저 생각났습니다. 순서 변경 - 동일한 결과. 그러나 기적은 일어나지 않습니다. 지금은 작업 초안을 가져 와서 OBJ_EDIT 를 배치하려고했지만 제대로 작동했습니다. 즉, 양식 위에 표시됩니다. 일반적으로 일종의 지옥. 내가 고려하지 않았거나 무언가를 잊어 버린 것이 분명합니다. 그래도 다음에는 이 갈퀴를 밟지 않도록 알아내고 싶다. 다음은 테스트를 위한 OnInit() 코드입니다.

이 경우 객체 핸들러가 필요하므로 생성된 항목과 순서가 한 곳에서 이루어지며 한 함수가 이 두 번째 함수를 생성하고 함수 호출을 변경하면 순서가 변경되는 오버레이가 없습니다.

그러한 버그는 잡기 어렵고 예측하기조차 어렵습니다.

 
MQ에 대한 정보입니다. OnTimer에 대한 참조에는 "... EventSetTimer() 함수 에서 수신할 ..."이 있습니다. "... 또는 EventSetMillisecondTimer()..."도 추가해야 합니다.
Документация по MQL5: Работа с событиями / EventSetTimer
Документация по MQL5: Работа с событиями / EventSetTimer
  • www.mql5.com
Работа с событиями / EventSetTimer - Документация по MQL5
 

모두들 안녕!

도움말에는 다음 단락 이 있습니다.

Все события обрабатываются одно за другим в порядке поступления. Если в очереди уже есть событие NewTick либо это событие находится в состоянии обработки, то новое событие NewTick в очередь mql5-программы не ставится. Аналогично, если в очереди mql5-программы уже находится событие ChartEvent или такое событие обрабатывается, то новое событие такого типа не ставится в очередь .

저것들. 이벤트 대기열에 ChartEvent가 있는 경우 대기열에 두 번째로 추가하면 안 됩니다. 없었어요 :)

검증을 위해 전문가를 스케치했는데.. 대기열에 이벤트가 있든 없든   ChartEvent 여부, ChartEvent 이벤트 핸들러 내가 생성한 횟수만큼 호출됩니다.

좋은데 도움말을 수정하셔야 할 것 같은데요... 아니면 제가 잘못 알고 있는건가요?

 input int N= 50 ; //количество событий в очереди

void OnInit ()
  {
   EventSetTimer ( 5 );
  }

void OnDeinit ( const int reason)
  {
   EventKillTimer ();    
  }

void OnTimer ()
  {
   for ( ushort i= 0 ; i<N; i++) EventChartCustom ( 0 , 1 ,i, 0 ,( string ) 0 );
  }


void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
   if (id> CHARTEVENT_CUSTOM ) Print ( "Обработано событие номер: " , lparam);
  }
 
MigVRN :

모두들 안녕!

도움말에는 다음 단락 이 있습니다.

저것들. 이벤트 대기열에 ChartEvent가 있는 경우 대기열에 두 번째로 추가하면 안 됩니다. 없었어요 :)

검증을 위해 전문가를 스케치했는데.. 대기열에 이벤트가 있든 없든   ChartEvent 여부, ChartEvent 이벤트 핸들러 내가 생성하는 횟수만큼 호출됩니다.

좋은데 도움말을 수정하셔야 할 것 같은데요... 아니면 제가 잘못 알고 있는건가요?

이는 큐 오버플로의 경우에만 적용되며 큐가 가득 차면 이미 큐에 있는 이벤트 유형은 넣지 않습니다.

대기열이 가득 차지 않은 경우(그리고 대기열 길이가 1024 오프핸드인 경우) 모든 이벤트가 처리됩니다.

 
Urain :

이는 큐 오버플로의 경우에만 적용되며 큐가 가득 차면 이미 큐에 있는 이벤트 유형은 넣지 않습니다.

대기열이 가득 차지 않은 경우(그리고 대기열 길이가 1024 오프핸드인 경우) 모든 이벤트가 처리됩니다.

이해했다. 감사해요 :)

추신: 위의 Expert Advisor에서 1000개 이상이 대기하지 않았습니다.

 
paladin800 :
MQ에 대한 정보입니다. OnTimer에 대한 매뉴얼에는 "... EventSetTimer() 함수 에 의해 수신되는 ..."이 있습니다. "... 또는 EventSetMillisecondTimer()..."도 추가해야 합니다.
그런 다음 필요하지 않더라도 모든 사람이 밀리 초 타이머를 설정합니다 ...