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

 
Vict :

우리가 서로를 이해하지 못하는 것.

그러나 귀찮게 하지 마십시오. µl 내부에서 CreateThread()를 통해 스레드를 생성하지 않습니다. 함수에 대한 포인터를 전달해야 합니다(스레드가 시작될 때 사용). 그러나 위에서 언급한 것처럼 쿠키입니다.

자체적으로 필요한 수의 스레드를 생성할 DLL을 만드십시오.

복잡한 계산을 수행하려는 경우 순수한 WinAPI 호출로는 충분하지 않습니다.

예, 우리는 많은 WinAPI 호출의 표준 프로토타입을 만들었지만 이것이 모든 것이 MQL에서 직접 호출될 수 있다는 것을 의미하지는 않습니다.

 
Igor Makanu :

아무도 포팅하지 않았습니다. 포함된 내용은 함수 서명일 뿐입니다.

흐름을 생성하려면 함수 본체가 필요합니다. 이것은 흐름에서 회전할 본체입니다!

Windows에서 스트림을 등록하려면 다음 구조를 채워야 합니다.

lpStartAddress 참조 - 이것은 스레드에서 작동할 함수에 대한 진입점 주소입니다. 메모리 할당 에 대해 침묵을 유지합니다.

이 문제를 해결하려면 메모리에 MQL을 사용하여 MyFunc()의 주소를 가져오는 방법을 찾아야 합니다. 하지만 메모리에는 없습니다. 단어에서가 아니라... 전혀 아닙니다!


나는 문제를 "손가락에 대해"더 이해하기 쉽게 설명하는 방법을 모르겠습니다 ... 이것은 본질적이지 않습니다)))

다음은 매개변수와 함께 포함된 기능입니다. 차이점은 무엇입니까?

HANDLE  CreateThread(PVOID thread_attributes, 
                     ulong stack_size, 
                     PVOID start_address, 
                     PVOID parameter, 
                     uint creation_flags, 
                     uint &thread_id);

그리고 여기에 함수의 주소를 가져오는 이식된 함수가 있습니다.

PVOID  GetProcAddress(HANDLE module,
                      uchar &proc_name[]);
 

실제로 함수의 물리적 주소를 사용할 수 없기 때문에 MQL에서 CreateThread를 완전히 호출할 수 없습니다.

실제 핸들러를 제공할 DLL을 직접 만들어야 합니다.

 
MetaQuotes Software Corp. :

실제로 함수의 물리적 주소를 사용할 수 없기 때문에 MQL에서 CreateThread를 완전히 호출할 수 없습니다.

실제 핸들러를 제공할 DLL을 직접 만들어야 합니다.

주석. CreateThread()로 이식됨; 및 GetProcAddress();
그리고
함수의 물리적 주소를 얻을 수 없습니다. 캐치는 무엇입니까? ))
보안은 좋은 것이지만 보시다시피 표준 WinAPI를 사용하는 기능을 제한합니다.
그렇다면 이러한 기능을 이식하고 표준 mql 라이브러리에 추가해야 했던 이유는 무엇입니까?
사용할 수 없는 경우 사용자를 오도함))
그리고 표준 WinAPI를 사용하여 없애고 싶었던 자신만의 비동기 dll을 작성하는 것이 좋습니다.
그러나 분명히 당신은 당신 자신의 비동기 dll을 작성하는 것으로 돌아가야 합니다.

추신
다음은 mql의 함정입니다. 항상 Google에 보내는 것을 좋아하는 사람들을 위해 이 정보는 정의에 따라 존재하지 않습니다.

 
Roman :

주석. CreateThread()로 이식됨; 및 GetProcAddress();
그리고
함수의 물리적 주소를 얻을 수 없습니다. 캐치는 무엇입니까? ))
보안은 좋은 것이지만 보시다시피 표준 WinAPI를 사용하는 기능을 제한합니다.
그렇다면 이러한 기능을 이식하고 표준 mql 라이브러리에 추가해야 했던 이유는 무엇입니까?
사용할 수 없는 경우 사용자를 오도함))
그리고 표준 WinAPI를 사용하여 없애고 싶었던 자신만의 비동기 dll을 작성하는 것이 좋습니다.
그러나 분명히 당신은 당신 자신의 비동기 dll을 작성하는 것으로 돌아가야 합니다.

추신
다음은 mql의 함정입니다. 항상 Google에 보내는 것을 좋아하는 사람들을 위해 이 정보는 정의에 따라 존재하지 않습니다.

WinAPi 기능 프로토타입 을 기능 이식과 혼동하지 마십시오.

우리는 의도적으로 표준 WinAPI 기능의 프로토타입을 제공 하여 개발자가 바퀴를 재발명할 필요가 없도록 훌륭하게 수행했습니다. 이것은 라이브러리가 아니라 설명입니다.

원시 WinAPI 설명이 있다고 해서 안전하지 않은 호출에 대한 보장/가능성을 제공한다는 의미는 아닙니다.

이 수준의 응용 프로그램 언어에서는 안전이 가장 중요합니다.

 
흠... 그러면 또 다른 문제가 생깁니다.
그러면 어떻게 mql에서 로드된 dll과 내보낸 함수를 초기화하는 것이 정상입니까?

LoadLibraryW( "MyDll.dll" );
GetProccAddress(hMyDll, "MyFunc" );
 
Roman :
흠... 그러면 또 다른 문제가 생깁니다.
그러면 어떻게 mql에서 로드된 dll과 내보낸 함수를 초기화하는 것이 정상입니까?

읽을 줄 아세요? 검색을 사용하시겠습니까? 이 리소스에는 DLL 작성에 대한 20개 이상의 기사가 있으며 일부 기사는 "직접" 작성되었습니다. - 관리자(개발자)가 읽고, 실행하고, 모든 것을 자유롭게 사용할 수 있습니다. - 프로그래밍을 몰라도 DLL을 작성하는 방법에 대한 자세한 지침 언어는 네트워크에 없습니다. 여기 이 사이트에만 있습니다! - 사진으로도!

무엇을 찾고 계신가요? - 홍수 금지?

로만 :

그러나 분명히 당신은 당신 자신의 비동기 dll을 작성하는 것으로 돌아가야 합니다.

당신이 글을 쓰는 것을 막는 것은 무엇입니까? 팡파르 소리가 필요하십니까? - 기본 C ++에 다소 익숙하거나 C #이 더 쉬운 사람 - 낮에는 이 정보를 Google에 검색하고 코드에서 작성하고 확인할 수 있습니다. 필요한 것은 "욕망과 열성적인 엉덩이"뿐입니다. 관리자 중 한 명이 IMHO라고 썼습니다. 더 정확하게는 표현을 찾을 수 없습니다.



추신: 관리자가 한 시간 내에 사용자에게 그렇게 많은 답변을 작성했던 경우를 기억하지 못합니다. 무엇이 변경되었습니까? 아니면 오늘 별이 이렇게 정렬 되었습니까? )))))))

 
Igor Makanu :

읽을 줄 아세요? 검색을 사용하시겠습니까? 이 리소스에는 DLL 작성에 대한 20개 이상의 기사가 있으며 일부 기사는 "직접" 작성되었습니다. - 관리자(개발자)가 읽고, 실행하고, 모든 것을 자유롭게 사용할 수 있습니다. - 프로그래밍을 몰라도 DLL을 작성하는 방법에 대한 자세한 지침 언어는 네트워크에 없습니다. 여기 이 사이트에만 있습니다! - 사진으로도!

무엇을 찾고 계신가요? - 홍수 금지?

추신: 관리자가 한 시간 내에 사용자에게 그렇게 많은 답변을 작성했던 경우를 기억하지 못합니다. 무엇이 변경되었습니까? 아니면 오늘 별이 이렇게 정렬 되었습니까? )))))))

이 기사에는 dll과 함수의 초기화에 대한 설명이 없습니다!!!
dll 라이브러리의 초기화 해제 및 내보낸 기능 이 어디에 설명되어 있는지 보여주시면 감사하겠습니다.
포럼에 연락하기 전에 사람들이 기사를 읽지 않는다고 생각할 필요가 없습니다!

이고르 마카누 :

당신이 쓰는 것을 막는 것은 무엇입니까? 팡파르 소리가 필요하십니까? - 기본 C ++에 다소 익숙하거나 C #이 더 쉬운 사람 - 낮에는 이 정보를 Google에 검색하고 코드에서 작성하고 확인할 수 있습니다. 필요한 것은 "욕망과 열성적인 엉덩이"뿐입니다. 관리자 중 한 명이 IMHO라고 썼습니다. 더 정확하게는 표현을 얻을 수 없습니다.

아무것도 방해하지 않습니다! 순수 WinAPI를 사용하는 작업이 있었습니다. 사용자 정의 dll이 없습니다!
주제는 mql의 다중 스레드 프로그래밍 문제를 논의하기 위해 만들어졌습니다. 오늘 어떤 종류의 부정적인 분위기가 있습니까? 내가 만든 주제에 어떤 종류의 홍수가 있습니까?
그런 댓글은 삼가해주세요.

 
Roman :
흠... 그러면 또 다른 문제가 생깁니다.
그러면 어떻게 mql에서 로드된 dll과 내보낸 함수를 초기화하는 것이 정상입니까?

이러한 기능을 mql로 끌 필요는 없습니다. dll에서 프로세스를 생성합니다.

 
Dmitry Fedoseev :

이러한 기능을 mql로 드래그할 필요가 없습니다. dll에서 프로세스를 생성합니다.

DLL_PROCESS_ATTACH에서 dll 초기화: mql 프로그램에서 호출하는 것으로 충분합니까?
WinAPI 기능을 문제 없이 사용할 수 있다고 생각했고, 닫힌 dll을 추가로 초기화해야 합니다.
LoadLibraryW( "MyDll.dll" );