시간제 노동자 - 페이지 2

 
TheXpert :

한 번만 더... 한 시간 동안 형제가 아니야?

존재하지 않는다는 의미는 아닙니다. 모든 사람의 임무는 다릅니다.

항해 ... 읽을 수 있습니까? 칠면조를 위해 어떻게 하는지 보여주세요.


  1. 아니, 누군지도 모르겠어 :D
  2. 글쎄, 나는 정직하게 내 작업을 위해 그러한 작업을 만나지 않았습니다. 더 빠를수록 좋습니다.
  3. 죄송합니다. 검색해 봤습니다.) 무슨 스트림인지 자세히 알아보지 못했습니다. 무슨 일이 일어나고 있는지. 따라서 칠면조를 노크할 왼쪽 스크립트만 실행하는 경우 작업에 따라 다릅니다.
또는 옵션으로 - 계산을 dll-ku 및 행의 모든 항목과 별도의 스레드로 푸시하는 것 - 그러나 이것은 변태처럼 보입니다.
 

Interesting :

... 상대적으로 말하면 이전 타이머 처리가 완료될 때까지 타이머 처리를 호출할 수 없습니다. 또는 더 간단히 말하면 OnTimer()는 이를 처리해야 하는 스레드가 사용 중일 때까지 실행할 권한을 얻지 못합니다.

두 번째 스레드에서 타이머 처리를 시작하는 것이 불가능함을 설명하기 위해 다음 예제를 사용할 수 있습니다(어리석지만 명확하게).

 int OnInit ()
{
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//
EventSetTimer ( 1 );
//----------------------------------------------------------------------------//
return ( 0 );
//----------------------------------------------------------------------------//
}

void OnTimer ()
{
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//
Print ( TimeLocal ());
Sleep ( 2000 );
//----------------------------------------------------------------------------//
}
저것들. Timer 이벤트가   NewTick 이벤트와 같은 방식으로 무시할 수 있습니까? 그리고 특정 조건에서는 Expert Advisor의 이벤트 대기열에 포함되지 않을 수 있습니까?
 
Yedelkin :
저것들. Timer 이벤트가   NewTick 이벤트와 같은 방식으로 무시할 수 있습니까? 그리고 특정 조건에서는 Expert Advisor의 이벤트 대기열에 포함되지 않을 수 있습니까?
이 경우 NewTick 이벤트 는 예외입니다. 다른 유형의 이벤트에 대한 검사는 없습니다. 이벤트 처리기가 이벤트 대기열이 채워지는 것보다 느리게 실행되면 대기열이 오버플로되고 일부 이벤트는 건너뜁니다. 위의 예에서 Expert Advisor의 실행 쓰레드가 하나만 존재함을 확인하고, 이벤트가 큐에 들어오는 순서대로 이벤트 처리가 순차적으로 이루어진다.
Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - Документация по MQL5
 
antt :
이 경우 NewTick 이벤트 는 예외입니다. 다른 유형의 이벤트에 대한 검사는 없습니다. 이벤트 처리기가 이벤트 대기열이 채워지는 것보다 느리게 실행되면 대기열이 오버플로되고 일부 이벤트는 건너뜁니다. 위의 예에서 Expert Advisor의 실행 쓰레드가 하나만 존재함을 확인하고, 이벤트가 큐에 들어오는 순서대로 이벤트 처리가 순차적으로 이루어진다.

훌륭합니다. 설명 감사합니다! 논리적이고 이해하기 쉬우며 추측할 필요가 없습니다.

흥미 롭습니다. 이벤트 처리 멀티스레딩에 대한 귀하의 질문에 대한 답변이 된 것 같습니다. 그리고 OnTimer에 대해서도 추측했습니다. :)

 
Yedelkin :
저것들. Timer 이벤트가   NewTick 이벤트와 같은 방식으로 무시할 수 있습니까? 그리고 특정 조건에서는 Expert Advisor의 이벤트 대기열에 포함되지 않을 수 있습니까?

내가 이해하는 한 다음과 같이 진행됩니다.

1. 모든 이벤트는 하나의 대기열에 배치됩니다. 대기열에 NewTick 이벤트가 있거나 이러한 이벤트가 처리 중인 경우 NewTick은 무시되고 대기열에 포함되지 않습니다.

2. 프로그래머는 어떤 이벤트와 처리 방법을 독립적으로 선택합니다. 동시에 OnTrade, OnTimer 및 OnTick의 핸들러가 주요 핸들러이며 Expert Advisors에서 자주 사용됩니다.

3. 하나의 이벤트를 처리하는 동안 다른 이벤트를 처리할 수 없습니다.

4. 이벤트 스택이 오버플로되면 오래된 이벤트는 처리 없이 대기열에서 제거됩니다.

5. 위의 세 가지 유형의 이벤트 중 Trade가 가장 적게 생성되고 NewTick이 가장 자주 생성됩니다(단, 위에서 설명한 Tick은 대기열에 포함되지 않을 수 있음).

6. 이 관점에서 가장 흥미로운 핸들러는 차트 + 사용자 이벤트 의 모든 이벤트를 처리하는 OnChartEvent입니다.

동시에 이벤트 대기열을 쉽게 오버플로할 수 있는 것은 이러한 이벤트의 수가 많기 때문입니다(이러한 이벤트가 많은 경우).

제 생각에는 이 상황에서 절약할 수 있는 유일한 것은 OnChartEvent에서 처리되는 이벤트가 무작위로 비동기적으로 생성된다는 것입니다.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5
 

Yedelkin :

흥미 롭습니다. 이벤트 처리 멀티스레딩에 대한 귀하의 질문에 대한 답변이 된 것 같습니다. 그리고 OnTimer에 대해서도 추측했습니다. :)

예, 원칙적으로 하나의 스레드에 대해 의심의 여지가 없었습니다. 특히 EA 자체에서 코드는 하나의 스레드에서 실행됩니다.

그리고 내가 설명한 것은 멀티스레딩이 MT에서 나타날 때(적어도 어떤 이유로 이벤트의 흐름이 분할될 때까지) 미래(MT6에 대해 말해보자)에 대한 꿈과 같습니다.

처음에는 최소한 모든 ChartEvent 이벤트를 별도의 스레드로 분리했지만 개발자는 여기에서 더 잘 알고 있습니다.

 

EA 가 특정 시간에 타이머 이벤트를 생성하도록 하는 방법이 있습니까? 예를 들어, 한 시간 또는 하루의 마지막 순간이 시작될 때.

 
Yedelkin :

EA 가 특정 시간에 타이머 이벤트를 생성하도록 하는 방법이 있습니까? 예를 들어, 한 시간 또는 하루의 마지막 순간이 시작될 때.

틀림없이.
 
TheXpert :
틀림없이.
비밀이 아니라면 어떻게 생겼습니까?
 
Yedelkin :
비밀이 아니라면 어떻게 생겼습니까?

타이머 관리자 사용 나는 기사를 양각하고 싶었고 어떻게 든 옆으로 옮겼습니다. 기사가 당기지 않을 수 있지만.

특정 시간에는 코드와 이벤트 큐의 싱글 쓰레드로 인해 작동하지 않지만 평균 오류는 1초 미만입니다(최대값은 코드에 의해 이벤트가 실행되는 최대 시간에 의해 제한됨) .

또한 타이머는 하나뿐입니다.

필요한?