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

 
친애하는 포럼 사용자.

다중 스레드로 작업하려면 먼저 비동기, 다중 스레딩 및 다중 프로세서 실행 간의 근본적인 차이점을 배우십시오. 그렇지 않으면 제자리에서 논리를 이해하는 것조차 불가능합니다. 이 시간.

둘째, 외부 DLL 에 대한 호출은 여전히 남아 있으며, 많은 스레드가 포함된 자체 라이브러리를 구현하는 것을 누가 막고 있습니까?

셋째, 어떤 작업에 mql 멀티스레딩이 필요합니까?

글쎄, 나는 당신이 여전히 동기화 개체를 연구해야 한다는 사실에 대해 말하는 것이 아닙니다. 필요하세요? 필요한 경우 dll을 작성하는 것은 매우 간단한 작업입니다.
 
Roman :

즉, DLL_PROCESS_ATTACH에서 초기화하려면: mql에서 프로그램을 호출하는 것으로 충분할까요?

mql 프로그램에서 dll에 있는 함수를 호출합니다.

 
Dmitry Fedoseev :

mql 프로그램에서 dll에 있는 함수를 호출합니다.

그리고 그들의 서명을 설명하는 데 어떤 문제가 있습니까? 어떻게든 메서드 서명을 통해 winapi를 가져오나요?
 
Andrey Pogoreltsev :
그리고 그들의 서명을 설명하는 데 어떤 문제가 있습니까? 어떻게든 메서드 서명을 통해 winapi를 가져오나요?

그리고 실례합니다. 왜 그것들을 설명합니까? 그리고 죄송합니다, 나는 아무것도 당기지 않았습니다))

 
Dmitry Fedoseev :

그리고 실례합니다. 왜 그것들을 설명합니까? 그리고 죄송합니다, 나는 아무것도 당기지 않았습니다))

소리, 나는 이미 당신이 묻는 줄 알았는데.
 
Andrey Pogoreltsev :
친애하는 포럼 사용자.

다중 스레드로 작업하려면 먼저 비동기, 다중 스레딩 및 다중 프로세서 실행 간의 근본적인 차이점을 배우십시오. 그렇지 않으면 제자리에서 논리를 이해하는 것조차 불가능합니다. 이 시간.

둘째, 외부 DLL 에 대한 호출은 여전히 남아 있으며, 많은 스레드가 포함된 자체 라이브러리를 구현하는 것을 누가 막고 있습니까?

셋째, 어떤 작업에 mql 멀티스레딩이 필요합니까?

글쎄, 나는 당신이 여전히 동기화 개체를 연구해야 한다는 사실에 대해 말하는 것이 아닙니다. 필요하세요? 필요한 경우 dll을 작성하는 것은 매우 간단한 작업입니다.

Andrey, 비동기와 멀티스레딩은 다른 문제라는 사실을 모두가 이해하고 있다고 생각합니다.
CreateThread() 함수는 WinAPI Includer에 설명되어 있으므로 스레드를 사용할 수 있다고 가정했습니다.
그리고 인클루드에 CreateTask()와 같은 기능이 설명되어 있지 않고, 코드 자체가 사라지기 때문에 비동기식 코드 작성을 가정하는 것은 불가능합니다.
따라서 흐름에 중점을 두었습니다. 그러나 밝혀진 바와 같이 설명된 기능은 WinAPI 프로토타입에 불과합니다.
반복하지만 작업은 순수 WinAPI를 사용하는 것이었으며 설명된 CreateThread() 프로토타입은 오해의 소지가 있었습니다. 결국 이것들이 프로토타입이라는 말은 어디에도 없습니다.
사람마다 하는 일이 다르기 때문에 비동기화를 하게 되었고, 일반적으로 항상 비동기식으로 쓰거나 쓰레드로 쓰는게 낫다고 생각하는데,
항상 비동기식으로 작성하는 습관을 들이면 빠른 프로그램을 작성할 수 있고 전문가의 수준을 높일 수 있습니다.
이것은 개발자 자신의 주요 원칙, mql 프로그램 실행 속도, 이것이 우리의 전부입니다!

mql에는 그러한 가능성이 없다는 것이 유감입니다.
따라서 나는 비동기 프로그래밍을 위한 표준 mql 기능을 개발하기 위해 행정부에 제안하고 있습니다 .
흐름이 있는 시간에는 문제가 있고 무엇보다도 안전이 있습니다.
비동기 모드의 경우 보안 장벽이 없다고 생각합니다.

대략적인 논리

mql에서 EventLoop의 구현을 확인하십시오.
MqlTask 클래스 생성
작업을 MqlTask obj 개체로 선언합니다.
작업 만들기 작업 = obj.CreateTask(MyFunc());
실행 성공 = 작업 -> Run();
실행 중지 성공 = 작업 -> SleepMs(ms);
성공 대기 = 작업 -> 대기(ms);
무기한 대기 성공 = 작업 -> Wait(0);
삭제 작업을 실행한 후 작업을 삭제합니다.

음, 제어를 위한 모든 종류의 getStatus

 
Roman :

Andrey, 비동기와 멀티스레딩은 다른 문제라는 사실을 모두가 이해하고 있다고 생각합니다.
CreateThread() 함수는 WinAPI Includer에 설명되어 있으므로 스레드를 사용할 수 있다고 가정했습니다.
그리고 포함에 CreateTask()와 같은 설명된 기능이 없으면 코드의 비동기 작성 가능성을 가정하는 것이 불가능하고 어떻게든 저절로 사라집니다.
따라서 흐름에 중점을 두었습니다. 그러나 밝혀진 바와 같이 설명된 기능은 WinAPI 프로토타입에 불과합니다.
반복하지만 작업은 순수 WinAPI를 사용하는 것이었으며 설명된 CreateThread() 프로토타입은 오해의 소지가 있었습니다. 결국 이것들이 프로토타입이라는 말은 어디에도 없습니다.
사람마다 하는 일이 다르기 때문에 비동기화를 하게 되었고, 일반적으로 항상 비동기식으로 쓰거나 쓰레드로 쓰는게 낫다고 생각하는데,
항상 비동기식으로 작성하는 습관을 들이면 빠른 프로그램을 작성할 수 있고 전문가의 수준을 높일 수 있습니다.
이것은 개발자 자신의 주요 원칙, mql 프로그램 실행 속도, 이것이 우리의 전부입니다!
mql에 그런 기회가 없는 것이 아쉽습니다. 그래서 행정부에 표준 mql 기능을 개발하도록 제안하고 있습니다.
비동기 프로그래밍의 경우 스레드와 무엇보다도 안전에 문제가 있기 때문입니다.
비동기 모드의 경우 보안 장벽이 없다고 생각합니다.
루프 사이클의 구현을 확인하고 이러한 사이클에서 작업을 실행합니다.

메소드를 실행할 비동기식 또는 다중 스레드를 이미 결정했습니다. 예를 들어 mql에서 비동기식으로 소켓으로 작업합니다.

이것이 서명이라는 사실은 즉시 분명했습니다. 안전한 가상 실행 환경에서 어떤 종류의 내부 구현에 대해 이야기하고 있습니까? 그리고 어떻게 상상하십니까?

다시 한번. 스레드로 작업하는 방법을 아는 사람은 이를 위한 DLL을 쉽게 작성하고 모든 작업을 수행할 것입니다.

그리고 예, mql에는 동일한 주문을 생성하고 네트워크와 작업하기 위한 비동기 메서드가 있습니다. 비동기식으로 만들기 위해 여전히 어떤 방법이 필요합니까? 그리고 이 모든 것의 실용성은 무엇입니까?

관심을 끌기 위해 한 스레드에서 작업 속도가 충분하지 않은 경우를 줄 수 있습니까?
 
Andrey Pogoreltsev :
메소드를 실행할 비동기식 또는 다중 스레드를 이미 결정했습니다. 예를 들어 mql에서 비동기식으로 소켓으로 작업합니다.

이것이 서명이라는 사실은 즉시 분명했습니다. 안전한 가상 실행 환경에서 어떤 종류의 내부 구현에 대해 이야기하고 있습니까? 그리고 어떻게 상상하십니까?

다시 한번. 스레드로 작업하는 방법을 아는 사람은 이를 위한 DLL을 쉽게 작성하고 모든 작업을 수행할 것입니다.

그리고 예, mql에는 동일한 주문을 생성하고 네트워크와 작업하기 위한 비동기 메서드가 있습니다. 비동기식으로 만들기 위해 여전히 어떤 방법이 필요합니까? 그리고 이 모든 것의 실용성은 무엇입니까?

관심을 끌기 위해 한 스레드에서 작업 속도가 충분하지 않은 경우를 줄 수 있습니까?

결정하려면 먼저 mql에서 사용할 수 있는 것과 금지되는 것을 이해해야 합니다.
CreateThread()가 인클루드에 있어서 쓰레드로 작업이 가능하다고 생각했습니다.
그러나 결과적으로 스레드가 금지되고 선택이 비동기에 속하지만 mql에서 비동기를 사용하는 방법도 명확하지 않습니다.
예, 소켓에 문제가 있습니다. 도움말에는 예를 들어 미국 주식에 대한 정보 수신을 제한하는 128개 이하의 소켓을 생성할 수 있다고 나와 있습니다.
그리고 이 128 소켓조차도 들어오는 데이터 처리에 지연이 없도록 비동기 모드로 전송하는 방법이 명확하지 않습니다.
그래서 다른 방식으로 문제의 해결 방법을 찾아야 했지만 자체 작성 dll이 없는 순수한 WinAPI에서 해결하고 싶었습니다 .
하지만 mql에서 비동기식으로 작업하는 방법은 이미 흥미롭습니다. 작업 예제가 있으면 정보를 공유하면 토론하는 것도 나쁘지 않을 것입니다.
그러나 mql 도움말에 표준 비동기 메서드가 표시되지 않습니다.

 
Roman :

결정하려면 먼저 mql에서 사용할 수 있는 것과 금지되는 것을 이해해야 합니다.
CreateThread()가 인클루드에 있어서 쓰레드로 작업이 가능하다고 생각했습니다.
그러나 결과적으로 스레드가 금지되고 선택이 비동기에 속하지만 mql에서 비동기를 사용하는 방법도 명확하지 않습니다.
예, 소켓에 문제가 있습니다. 도움말에는 예를 들어 미국 주식에 대한 정보 수신을 제한하는 128개 이하의 소켓을 생성할 수 있다고 나와 있습니다.
그리고 이 128 소켓조차도 들어오는 데이터 처리에 지연이 없도록 비동기 모드로 전송하는 방법이 명확하지 않습니다.
그래서 다른 방식으로 문제의 해결 방법을 찾아야 했지만 자체 작성 dll이 없는 순수한 WinAPI에서 해결하고 싶었습니다 .
하지만 mql에서 비동기식으로 작업하는 방법은 이미 흥미롭습니다. 작업 예제가 있으면 정보를 공유하면 토론하는 것도 나쁘지 않을 것입니다.
그러나 mql 도움말에 표준 비동기 메서드가 표시되지 않습니다.

winapi를 통해 소켓과 비동기식으로 작업하려면 winsock2를 사용하십시오.

OVERLAPPED 및 WSAEVENT와 함께 WSARecv 및 WSASend를 시도 하십시오 .

그럼 기다림...
 

똑똑한 참가자들을 읽고 있는데 당황스럽네요...

그리고 왜이 모든 종소리와 휘파람?

MQL에서 멀티스레딩이 매우 필요한 경우의 예를 들어주실 수 있습니까? 저에게 유일한 응용 프로그램은 정기적인 수단으로 매우 일반적으로 구현되는 테스트 전략입니다.

이론적으로 여러 WebRequest 를 실행하는 것이 합리적일 수 있지만 제 생각에는 멀티스레딩이 전혀 필요하지 않습니다.

멀티스레딩이 직접적으로 필요한 작업은 무엇입니까?