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

 
Реter Konow :

정말 모든 것이 위험합니까? 메모리 해제 오류...

이 예는 Windows에서 장치 컨텍스트 및 할당된 리소스를 캡처하는 일반적인 원칙에 관한 것입니다. 독립 스레드를 프로그래밍할 때 개발자는 OS에서 요구할 때 장치 컨텍스트와 리소스를 해제하도록 보장해야 합니다. 개발자가 저수준 명령을 사용하는 경우 그는 다음을 수행해야 합니다. 자신이 사용한 모든 리소스를 해제하십시오 ... 여기에서 일반적으로 다시 내가 쓴 순간까지 - 구글 정보 "Hello World"를 사용하여 한 번 작성 하십시오 https://www.mql5.com/en/forum/318593/ page5#comment_12572558 그러면 많은 것을 이해하게 될 것입니다. 작업의 99%가 시스템 프로그래머에 의해 수행되었음을 이해하게 될 것입니다.

저것들. MQL 환경에서 작업 - 이것은 Metaquote 프로그래머에 의해 수행되었습니다 - MQL 프로그램의 부적절한 작동의 경우 터미널의 안정적인 작동을 보장

 
Andrey Pogoreltsev :

멀티스레딩 - 작업이 여러 스레드에서 실행됩니다. 그것들은 하나의 프로세서에서 작동할 수 있으며, 모두 동일하게 멀티스레딩이 있고 프로세서 시간 할당량이 끝나면 프로세서 간에 전환됩니다. 공유 리소스에 액세스하려면 동기화가 필요합니다. 교착 상태, 경쟁 조건, 메모리 해제 오류 및 기타 "놀라움"으로 가득 차 있습니다.

비동기 - 일반적으로 다른 장치(네트워크 장비, 저장 장치, 주변 장치 등)에서 기능의 비차단 실행(즉, 메서드가 종료된 직후 제어 반환). 예를 들어 고성능 다중 사용자 서버를 작성할 수 있습니다. 클라이언트 연결을 처리하기 위해 하나의 스레드와 상태 머신만 사용합니다. 그것은 모두 이 서버의 목적에 달려 있습니다.

귀하의 경우 WinAPI를 사용하여 많은 수의 연결을 생성해야 하며 예를 들어 타이머 스레드를 유지하지 않도록 시간 초과가 있는 WaitForMultipleObjects를 통해 이러한 연결의 상태를 확인할 수 있습니다.

추신. 이론적으로 IOCompletionPort를 사용할 수 있지만 더 많은 지식과 명확한 설계가 필요합니다.

음, 음... 서로를 찾았습니다.

 
아니면 일부 비타민은 사람들에게 충분하지 않습니까? ...또는 미량 원소...
 
Roman :

유익한 답변 감사합니다 :)
글쎄, 설명하고 무엇을, 어디에 있는지 말해 봅시다.
그리고 정기적인 방법으로 Eventloop 를 사용하여 비동기 코드를 작성하는 방법은 무엇입니까?

모든 것이 문서에 있습니다.

우선, 그것을 읽고 무언가를 작성해 보십시오.

작동하지 않으면 포럼에 요청할 수 있습니다.

지금은 할 얘기가 없습니다.


 
Koldun Zloy :

모든 것이 문서에 있습니다.

우선, 그것을 읽고 무언가를 작성해 보십시오.

작동하지 않으면 포럼에 요청할 수 있습니다.

지금은 할 얘기가 없습니다.


테마가 무엇을 위해 만들어졌다고 생각하시나요?
네이티브 방식으로 비동기 코드를 작성하는 방법을 알려주고 문서에 표시합니다.
요청을 비동기적으로 보내는 것 외에도 콜백 기능이 있는 위치, 제어 EventLoop이 있는 위치, Wait의 위치 등을 표시합니다.
사용자를 위한 이 기능이 없고 이것은 도크에 없기 때문에 답변을 드릴 수 없을 것이라고 확신합니다.
그게 다야, 이야기할 것이 없습니다. 여기 Andrey Pogoreltsev 주제에서 의사 소통의 주제를 이해하는 한 사람입니다.

 
이벤트 루프! Eventloop이 있는 사람이 있습니까? 여기 Eventloop가 없으면 사람이 기분이 좋지 않습니다! 그럼 Eventlup에게 누군가를 주십시오!
 

로만 , 2019.07.27 09:30

테마가 무엇을 위해 만들어졌다고 생각하시나요?


멀티스레딩에 대해 질문하셨습니다. 그녀는 아니다.

하지만 지금 당장 걱정할 필요는 없습니다.

로만 , 2019.07.27 09:30

네이티브 방식으로 비동기 코드를 작성하고 문서에 표시하는 방법을 알려주십시오.
요청을 비동기적으로 보내는 것 외에도 콜백 기능이 있는 위치, 제어 EventLoop이 있는 위치, Wait의 위치 등을 표시합니다.
사용자를 위한 이 기능이 없고 이것은 도크에 없기 때문에 답변을 드릴 수 없을 것이라고 확신합니다.
그게 다야, 이야기할 것이 없습니다. 여기 Andrey Pogoreltsev 주제에서 의사 소통의 주제를 이해하는 한 사람입니다.

이 모든 것을 보여드릴 수 있습니다. 의미는 어떻습니까?

필요했다면 스스로 찾았을 것입니다.

분명히, 당신은 문서나 기사를 읽지 않았습니다.
 
Koldun Zloy :

멀티스레딩에 대해 질문하셨습니다. 그녀는 아니다.

멀티스레딩은 https://www.mql5.com/en/docs/runtime/running 입니다. 우리는 작업을 병렬화하고 여러 차트를 열고(불행히도 아직 서비스의 기능을 사용하려고 시도하지 않았습니다. 어쩌면 더 쉬울까요? ) 별도의 스레드에서 작업하는 전문가를 매달아 해결합니다. 동기화 및 데이터 교환 문제(작업)

나는 TS에게 5 번 물었습니다 - 거래 터미널이 왜 그것을 필요로합니까 ... 그는 특정 작업이나 목표가 없기 때문에 모릅니다

나는 거래 터미널의 작업에 일반적이지 않은 클라이언트-서버 응용 프로그램에서만 응용 프로그램을 봅니다. 누군가가 서버에 통계를 보내는 것이 편리할까요? - 일반적으로 기성품 예제(기사)가 이미 작성되었습니다. https://www.mql5.com/en/articles/5337

소스 코드를 읽을 수 있고 기사의 품질이 우수합니다. 여러 스레드에서 병렬 계산을 수행하도록 소스 코드를 수정할 수 있습니다. )))

 
Igor Makanu :

이 예는 Windows에서 장치 컨텍스트 및 할당된 리소스를 캡처하는 일반적인 원칙에 관한 것입니다. 독립 스레드를 프로그래밍할 때 개발자는 OS에서 요구할 때 장치 컨텍스트와 리소스를 해제하도록 보장해야 합니다. 개발자가 저수준 명령을 사용하는 경우 그는 다음을 수행해야 합니다. 자신이 사용한 모든 리소스를 해제하십시오 ... 여기에서 일반적으로 다시 내가 쓴 순간까지 - 구글 정보 "Hello World"를 사용하여 한 번 작성 하십시오 https://www.mql5.com/en/forum/318593/ page5#comment_12572558 그러면 많은 것을 이해하게 될 것입니다. 작업의 99%가 시스템 프로그래머에 의해 수행되었음을 이해하게 될 것입니다.

저것들. MQL 환경에서 작업 - 이것은 Metaquote 프로그래머에 의해 수행되었습니다 - MQL 프로그램의 부적절한 작동의 경우 터미널의 안정적인 작동을 보장

글쎄, 나는 논쟁하지 않는다, 확신한다. 스트림에 대한 적절한 독립적인 작업은 독학 코더의 능력을 넘어 심각한 오류로 이어질 수 있습니다. 성냥은 아이들의 장난감이 아닙니다. 그러나 어떻게든 하나의 프로그램 내에서 멀티스레딩에 도달해야 합니다.

결국 여기에는 간단한 논리로 충분합니다. 서비스를 순차적으로 실행해도 오류가 발생하지 않으며 각 서비스는 자체 스레드에서 실행됩니다. 이는 메커니즘이 이미 설정 및 디버깅되었음을 의미합니다. 괜찮은. 우리는 한 걸음 더 나아가야 합니다. 특별 섹션의 Expert Advisor 코드에 이러한 서비스를 작성하십시오. 모듈. 각 모듈은 동일한 서비스입니다. 그런 다음 이러한 모듈을 순차적으로 컴파일하고 동시에 실행합니다. 모두.

기본적으로 아무것도 바뀌지 않습니다. 고문의 코드 안에는 서비스만 작성됩니다. 컴파일 및 작동도 됩니다. 차트에서 EA가 제거되면 소멸됩니다. 이것이 Expert Advisor의 멀티스레딩을 얻는 방법입니다.

 
훨씬 더 쉬울 수 있습니다. Expert Advisor 자체는 별도로 작성된 필요한 서비스를 로드합니다. 차트에서 제거되면 중지합니다. 어드바이저에서 서비스 시작을 추가하기만 하면 됩니다. 그리고 스레드 간의 내부 상호 작용은 프로그래머의 작업입니다. 리소스로 해결되었습니다.