MQL의 비동기 및 다중 스레드 프로그래밍 - 페이지 25

 
Yuriy Asaulenko :


주제를 다시 읽기 시작했고 Igor는 이미 그것에 대해 썼습니다.

Пишите dll (в которой Вы должны выделить память и зарегистрировать новый поток! - затем при выходе все аккуратно уничтожить!) и вызывайте ее из MQL

그것이 Yur이 메모리를 할당하고 흐름을 등록해야 한다고 말하려고 했던 것입니다.
이고르는 할당하고 등록하는 것이 필요하다고 쓰고, 아무 것도 할 필요가 없다고 씁니다.
여기에서 내 머리가 빙빙 돌고 있습니다. 드디어 막다른 골목..

Igor는 특별한 방식으로 탑에서 공부했으며, 이것에서 그는 독학으로 우리보다 더 많이 이해해야합니다.
나는 처음에 메모리를 할당하고 초기화하는 것이 필요하다는 것과 같은 경향이 있었습니다.
이것은 여전히 다른 C 과정에서 나온 것이며 초기화 및 메모리 할당이 내 기억에서 연기되었습니다 . 이것이 적절한 코딩의 핵심입니다. 흐름이없고 쓰레기가 없기 때문입니다.

Igor에게 이 질문에 대해 C++에서 이 작업을 수행하는 방법을 설명해 주십시오.
말로만 하는게 아니라 예를 들자면 말로는 이해가 안됨 니피가))

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved )
{
         switch (ul_reason_for_call)
        {
         case DLL_PROCESS_ATTACH:
         case DLL_THREAD_ATTACH:
         case DLL_THREAD_DETACH:
         case DLL_PROCESS_DETACH:
                 break ;
        }
         return TRUE;
}
 
Roman :

주제를 다시 읽기 시작했고 Igor는 이미 그것에 대해 썼습니다.

그것이 Yur이 메모리를 할당하고 흐름을 등록해야 한다고 말하려고 했던 것입니다.

물론, 모든 것이 필요합니다. 모든 것이 필요합니다. 그러나 DllMain은 아무 편도 없습니다.) - 다른 데 필요합니다. 그리고 당신을 위한 것이 아닙니다. 그녀를 잊어 버려, 영원히 낫습니다.) 당신에게 그녀는 존재하지 않습니다.
함수 내보내기를 작성합니다. 다른 모든 것은 기존 프로그램과 완전히 동일합니다. 그리고 필요도 있습니다.
나머지는 나중에, 나는 이미 자고 있습니다))
 
C/C++는 너무 복잡하기 때문에 C#을 사용하세요.
 
Roman :

주제를 다시 읽기 시작했고 Igor는 이미 그것에 대해 썼습니다.

나는 처음에 메모리를 할당하고 초기화하는 것이 필요하다는 것과 같은 경향이 있었습니다.
이것은 여전히 다른 C 과정에서 나온 것이며 초기화 및 메모리 할당이 내 기억에서 연기되었습니다 . 이것이 적절한 코딩의 핵심입니다. 흐름이없고 쓰레기가 없기 때문입니다.

Igor에게 이 질문에 대해 C++에서 이 작업을 수행하는 방법을 설명해 주십시오.

당신은 이 주제를 토론의 맨 위로 능숙하게 밀어내고 점점 더 많은 토론 참가자를 문제에 끌어들이기 위해 노력합니다.)))

서신을 문맥에서 벗어나지 마십시오.

- WinAPI의 작동 방식을 이해하고 싶다면 미리 만들어진 예제를 사용하여 dll = 이 리소스에 대한 20개 이상의 기사를 작성할 수 있다는 맥락에서 이 글을 작성했습니다.

- 시스템 프로그래머가 이미 작성한 포함 파일을 교체하여 순수한 WinAPI 호출을 얻을 수 있다는 맥락에서 이것을 썼습니다.

....

서신의 본질: 쓰기와 쓰기가 아닌 읽기와 작업 시작... 프로젝트 유형, 코드 추가, 컴파일 = 결과를 얻었습니다. 수백 또는 수천 명의 시스템 프로그래머가 모든 작업을 수행했습니다. 템플릿과 포함된 파일의 수정은 의미가 있어야 합니다. 모르는 경우 "왜 그렇게 많은 코드가 있어도 작동합니다!" - 재현할 수 없는 버그 및/또는 OS/PC와의 호환성(이동성) 부족이 발생합니다.

 
Vladimir Simakov :
제작자를 위한 게시물입니다. 트롤 패스. 그래픽 인터페이스의 경우 OnChartEvent를 별도의 스레드에 넣는 것이 매우 그렇게 보입니다.

왜 개발자가 만든 모델을 깨나요? - MQL 프로그램의 모델은 간단하고 이해하기 쉽고, 이벤트가 있습니다. - 이러한 이벤트를 처리하는 진입점이 있습니다(OnTick(),OnInit()....OnChartEvent()).

모든 MQL 프로그램에서 거래 환경의 상태를 얻을 수 있으며(지표도 미결 주문의 이익 등을 볼 수 있음) 하나의 차트에서 전문가 + 스크립트, 전문가 + 사용자 지정 표시기를 결합할 수 있습니다. MQL 프로그램 실행, 전문가 거래, 표시기는 그래픽 시각화를 표시합니다. 사용자 지정 표시기 스트림의 성능이 충분하지 않은 경우(같은 스레드에서 작동함) 물론 문제가 있습니다. - 2 Expert를 사용해야 합니다. 2개의 차트에 대한 어드바이저 및 차트 간의 상호 작용 구성...

다시 - 특정 작업이 있고 구현이 있습니다. 이 기능이 필요한 이유를 여러 번 물었습니다. 아직 답이 없습니다. 3D 시각화에 대한 공간적 추론만 .... 그리고 DirectX를 어디에서 얻을 수 있는지에 대한 대화는 없습니다. 3D 작업용;)

IMHO, 만지지 마십시오! )))

 
Igor Makanu :

왜 개발자가 만든 모델을 깨나요? - MQL 프로그램의 모델은 간단하고 이해하기 쉽고, 이벤트가 있습니다. - 이러한 이벤트를 처리하는 진입점이 있습니다(OnTick(),OnInit()....OnChartEvent()).

모든 MQL 프로그램에서 거래 환경의 상태를 얻을 수 있으며(지표도 미결 주문의 이익 등을 볼 수 있음) 하나의 차트에서 전문가 + 스크립트, 전문가 + 사용자 지정 표시기를 결합할 수 있습니다. MQL 프로그램 실행, 전문가 거래, 표시기는 그래픽 시각화를 표시합니다. 사용자 지정 표시기 스트림의 성능이 충분하지 않은 경우(같은 스레드에서 작동함) 물론 문제가 있습니다. - 2 Expert를 사용해야 합니다. 2개의 차트에 대한 어드바이저 및 차트 간의 상호 작용 구성...

다시 - 특정 작업이 있고 구현이 있습니다. 이 기능이 필요한 이유를 여러 번 물었습니다. 아직 답이 없습니다. 3D 시각화에 대한 공간적 추론만 .... 그리고 DirectX를 어디에서 얻을 수 있는지에 대한 대화는 없습니다. 3D 작업용;)

IMHO, 만지지 마십시오! )))

바라보다. 버튼이 있습니다. 당신은 그녀를 호출합니다. OnChartEvent가 대기 중입니다. 이 대기열에만 이미 OnTick이 있고 그 뒤에 OnTime이 있으며 그 안에는 모든 기호에 대한 CopyRate가 있습니다. 잠시 동안 이 대기열은 차단되고 더러운 반복 구름에 대한 주기입니다. 결과적으로 예를 들어 버튼에서 대화 상자가 열리면 인터페이스가 중단됩니다. 물론 비판적이지는 않지만 추악합니다.
 
Vladimir Simakov :
바라보다. 버튼이 있습니다. 당신은 그녀를 호출합니다. OnChartEvent가 대기 중입니다. 이 대기열에만 이미 OnTick이 있고 그 다음에는 OnTime이 있으며 그 안에는 모든 악기에 대한 CopyRate가 있습니다. 잠시 동안 차단하고 반복적인 구름에 대한 주기입니다. 결과적으로 예를 들어 버튼이 대화 상자를 열어야 하는 경우 인터페이스가 정지됩니다. 물론 비판적이지는 않지만 추악합니다.

GUI는 기본 Expert Advisor에서 실행되어야 하고 다른 모든 것은 별도의 Expert Advisor에서 실행되어야 합니다. 이 별도의 슬레이브 EA는 보이지 않는 OBJ_CHART 에 배치되고 기본 EventSendCustom() 경로와 상호 작용합니다.

그것은 멀티 스레딩과 같은 것으로 밝혀졌습니다. 이렇게 구현했습니다.

 
Vladimir Simakov :
바라보다. 버튼이 있습니다. 당신은 그녀를 호출합니다. OnChartEvent가 대기 중입니다. 이 대기열에만 이미 OnTick이 있고 그 다음에는 OnTime이 있으며 그 안에는 모든 악기에 대한 CopyRate가 있습니다. 잠시 동안 차단하고 반복적인 구름에 대한 주기입니다. 결과적으로 예를 들어 버튼에서 대화 상자가 열리면 인터페이스가 중단됩니다. 물론 비판적이지는 않지만 추악합니다.

OnChartEvent OnTick 및 OnTime의 우선 순위를 모르지만 개발자는 Expert Advisor가 사용 중이고 이벤트를 처리하지 않으면 이 이벤트가 대기열을 생성하지 않는다고 썼습니다. 즉, 틱 또는 타이머를 건너 뛸 것입니다 ( OnChartEvent - 모르겠습니다, 확인하지 않았습니다).


여기서 개발자의 논리는 간단하고 각 이벤트는 전문가의 특정 작업이지만이 이벤트에 대해 확실히 알고 두 번 이상 확인했습니다 (MT5에서는 이론상으로 더 많이 작업합니다. ONTick이 물리적으로 작동하는 방식):

MT4에 대해 확실히 말할 것입니다. 모든 거래 작업 은 들어오는 틱을 통해서만 수행되어야 합니다. 그렇지 않으면 10개 중 9개의 경우에 서버에서 거래 작업 처리를 거부하게 됩니다.

저것들. 나는 BUY 버튼으로 인터페이스를 만들었습니다. 아이디어에 따르면 BUY를 누르십시오. 즉시 주문을 보내지 만 이것은 직접 작동하지 않습니다. 사용자의 명령을 기억해야합니다 (이상적으로는 버튼을 잠그지 않도록 손으로 찌르기))) 진드기가 도착하면 OnTick()에서 - 서버에 주문을 보냅니다 - 이것이 99%의 경우에 작동하는 방식입니다. 틱이 왔습니다 - 거래 요청을 실행할 수 있습니다(MQL의 어느 곳에서도 가능하지 않음)



또한 OnChartEvent를 비동기 스레드에 넣으면 실행 코드의 교착 상태도 발생합니까? - 예를 들어, OnChartEvent 에서 버튼을 누르면 거래 통계가 표시되고 OnTick에서 동일한 기능(마지막 거래 손실)을 사용합니다. - 뭔가 있을 것입니다! - IMHO 당신은 모든 것을 긁어 모으지 않을 것입니다

 
Andrey Barinov :

GUI는 기본 Expert Advisor에서 실행되어야 하고 다른 모든 것은 별도의 Expert Advisor에서 실행되어야 합니다. 이 별도의 슬레이브 EA는 보이지 않는 OBJ_CHART 에 배치되고 기본 EventSendCustom() 경로와 상호 작용합니다.

그것은 멀티 스레딩과 같은 것으로 밝혀졌습니다. 이렇게 구현했습니다.

정확히. 하녀가 없어서... 목발이라고 해요.
 
Igor Makanu :

OnChartEvent OnTick 및 OnTime의 우선 순위를 모르지만 개발자는 Expert Advisor가 사용 중이고 이벤트를 처리하지 않으면 이 이벤트가 대기열을 생성하지 않는다고 썼습니다. 즉, 틱 또는 타이머를 건너 뛸 것입니다 ( OnChartEvent - 모르겠습니다, 확인하지 않았습니다).


여기서 개발자의 논리는 간단하고 각 이벤트는 전문가의 특정 작업이지만이 이벤트에 대해 확실히 알고 두 번 이상 확인했습니다 (MT5에서는 이론상으로 더 많이 작업합니다. ONTick이 물리적으로 작동하는 방식):

MT4에 대해 확실히 말할 것입니다. 모든 거래 작업 은 들어오는 틱을 통해서만 수행되어야 합니다. 그렇지 않으면 10개 중 9개의 경우에 서버에서 거래 작업 처리를 거부하게 됩니다.

저것들. 나는 BUY 버튼으로 인터페이스를 만들었습니다. 아이디어에 따르면 BUY를 누르십시오. 즉시 주문을 보내지 만 이것은 직접 작동하지 않습니다. 사용자의 명령을 기억해야합니다 (이상적으로는 버튼을 잠그지 않도록 손으로 찌르기))) 진드기가 도착하면 OnTick()에서 - 서버에 주문을 보냅니다 - 이것이 99%의 경우에 작동하는 방식입니다. 틱이 왔습니다 - 거래 요청을 실행할 수 있습니다(MQL의 어느 곳에서도 가능하지 않음)



또한 OnChartEvent를 비동기 스레드에 넣으면 실행 코드의 교착 상태도 발생합니까? - 예를 들어, OnChartEvent 에서 버튼을 누르면 거래 통계가 표시되고 OnTick에서 동일한 기능(마지막 거래 손실)을 사용합니다. - 뭔가 있을 것입니다! - IMHO 당신은 모든 것을 긁어 모으지 않을 것입니다

동기화는 프로그래머의 작업입니다. 방법을 모르고 멀티스레딩을 사용하지 않습니다. 제작자의 임무는 도구를 제공하는 것이며 이미 자신에게 모든 사악한 피노키오가 있습니다. 동일한 la mutex 자체는 구현하는 데 전혀 문제가 되지 않습니다.