Init() 및 DeInit() 실행 순서 - 페이지 12

 
Andrey Dik :

글쎄, 애도 가자 ...

당신은 일반 데스크탑 애플리케이션에서 찾을 수 없는 것을 정확히 요구하고 있습니다.

앱에서 누락된 것은 무엇입니까? 동기화? )))

개발자가 이미 사용 가능한 이러한 모든 트릭을 만들지 않았다면 MQL 프로그램 작성자는 보안 및 실행 속도 문제를 포함하여 데스크탑 개발의 모든 매력에 끊임없이 직면하게 될 것입니다.

일부 사이비 과학적 추론은 사실 없이 진행되었습니다. MT4에서 표시기는 연속적인 OnInit() 및 DeInit()와 완벽하게 작동합니다. 동시에 하나의 스레드에서 모든 표시기가 작동하는 단점이 있습니다. MT5에서도 요구되는 표시기의 올바른 철자로 해결됩니다. MT5에서 그들은 이것에서 멀지 않았지만 모두 동일하지만 한 차트의 지표는 계속해서 한 스레드에서 작동합니다.
 
Ihor Herasko :

1. 지원서에서 누락된 것은 무엇입니까? 동기화? )))

2. 일부 사이비 과학적 추론은 사실 없이 진행되었습니다. MT4에서 표시기는 순차 OnInit() 및 DeInit() 과 완벽하게 작동합니다 . 동시에 하나의 스레드에서 모든 표시기가 작동하는 단점이 있습니다. MT5에서도 요구되는 표시기의 올바른 철자로 해결됩니다. MT5에서 그들은 이것에서 멀지 않았지만 모두 동일하지만 한 차트의 지표는 계속해서 한 스레드에서 작동합니다.

1. 무슨 동기화를 말하는거야?!

2. MT4에서는 표시기 코드 실행의 일부로 init가 먼저 수행된 다음 deinit가 수행됩니다. 그 외에 무엇이 필요합니까?! MT5도 마찬가지입니다.


여러 사람들이 이미 MT5의 지표 실행 패러다임의 틀 내에서 완료하는 데 문제가 있는 작업의 특정 예를 요청했습니다. 손가락에서 빨지 않고 명확하고 예가 있습니까?

 
Andrey Dik :

1. 무슨 동기화를 말하는거야?!

스레드에 대해. 한 스레드(종료 명령이 제공된 스레드)가 종료될 때까지 다른 스레드는 시작되지 않습니다. 또는 이 모든 것이 하나의 스레드에서 발생하면 훨씬 더 간단합니다. "이전" TF와 관련된 모든 프로그램의 실행을 완료하고 그 후에야 "새" TF에서 프로그램을 시작합니다.

2. MT4에서는 표시기 코드 실행의 일부로 init가 먼저 수행된 다음 deinit가 수행됩니다. 그 외에 무엇이 필요합니까?! MT5도 마찬가지입니다.

권리. MT4에서는 모든 것이 정확히 동일합니다. 그러나 MT5에서는 그렇지 않습니다. 이것이 주제에 대한 것입니다.

여러 사람들이 이미 MT5의 지표 실행 패러다임의 틀 내에서 완료하는 데 문제가 있는 작업의 특정 예를 요청했습니다. 손가락에서 빨지 않고 명확하고 예가 있습니까?

바로 전날에도 세 가지 예 를 들었다. 당신은 그들을 볼 수 없습니까?
 
Andrey Dik :

맞습니다. 그러면 안됩니다. 예를 들어 Total Commander를 실행하십시오. Windows가 op.memory에서 TC 사본을 언로드/로드하는 "올바른" 순서를 처리하도록 Microsoft에서 요구하는 이유는 무엇입니까? 이것이 OS 문제입니까?

OS의 관심사는 TC가 다른 TC와 간섭하지 않고 메모리에서 수행하는 작업, 파일 교환 또는 더 친밀한 것 - 이것이 그들의 비즈니스, 프로그램이라는 것입니다.

"그렇게 생각해요!" (c) 미미노, 1977

Total Commander와 어떤 관련이 있습니까? 시스템 리소스에서 직접 작동한다는 점에서 상당히 낮은 수준의 유틸리티일 뿐입니다. MQL 프로그램의 경우 MT 플랫폼의 임무는 동기화와 같은 시스템 문제에서 응용 프로그램 프로그래머를 최대한 자유롭게 하는 것입니다. 이 플랫폼은 모든 사람에게 보다 효율적이고 한 번에 제공할 수 있습니다. MQL 프로그래머는 시세 분석 및 거래 전략에 대해 생각해야 합니다. 이것이 MT의 목적입니다.

파일과 데이터의 교환은 무엇과 관련이 있습니까? MQL 프로그램의 컨텍스트에서 작업 논리를 고려하십시오. 이제 요점은 아무 것도 교환하지 않을 것이지만 의도한 목적을 위해 OnInit / OnDeinit 이벤트를 사용하려고 한다는 것입니다. 일부 상태에서 올바르게 시작하고 상태 저장으로 올바르게 자체를 완료하기 위한 것입니다. 그들이 이것에 적합하지 않다면 이미 언급했듯이 무엇을위한 것입니까? 변호인의 주장으로 판단 - 내부 탬버린으로 춤을 추고 전후에 다른 사본이 무엇인지, 어느 시간대에서 어느 것으로 전환했는지 알아 보려면? 이것은 MQ가 달성하고자 하는 것과 정반대의 효과입니다. 즉, 한 사본은 다른 사본에 대해 아무것도 모릅니다.

하나의 복사본이 아무것도 알지 못하고 알 필요가 없고 동시에 부작용 없이 작동하려면 커널은 모든 복사본(완료된 복사본과 시작하는 복사본 모두)에 대해 알고 있어야 하며 이에 대한 우아한 처리 를 제공해야 합니다. /deinit 표준 대기열 비유의 이벤트 . 터미널은 이미 모든 복사본을 추적하고 이벤트 대기열을 사용하지만 어떤 이유로 init/deinit는 이벤트 논리를 위반합니다.

 
Stanislav Korotky :

하나의 복사본이 아무것도 알지 못하고 알 필요가 없고 동시에 부작용 없이 작동하려면 커널은 완료된 복사본과 시작하는 복사본 모두에 대해 알아야 하고 적절한 처리 를 제공해야 합니다. /deinit 표준 대기열 비유의 이벤트 . 터미널은 이미 모든 복사본을 추적하고 이벤트 대기열을 사용하지만 어떤 이유로 init/deinit는 이벤트 논리를 위반합니다.

동의한다.
 
Andrey Khatimlianskii :

Ch에 마침표를 저장하는 문제는 무엇입니까? 변하기 쉬운?

서로 다른 시간대에 표시기가 연속적으로 실행되는 사이에 데이터 배열을 전송해야 하는 이유는 무엇입니까?


Andrey, 글쎄요, 저는 전역 터미널 변수를 좋아하지 않습니다. 나는 (오랫동안) 그것들을 실험했고, 동기화의 속도와 복잡성에 매우 실망했습니다. 근거가 없기 때문에 속도를 보여주는 예를 조금 나중에 작성하려고 합니다. 아마도 뭔가 이미 바뀌었고 내가 틀렸을 수도 있습니다. 그러나 내가 전역 변수에 대해 좋아하지 않는 것은 그것들이 그들만의 별도의 삶을 살고 있고 절대적으로 공개된다는 것입니다. F3 키를 눌러 누구나 볼 수 있고 핸들로 삭제할 수 있습니다. 여럿이면 나쁘지 않은데 다들 사용하기 시작하면 개인적으로 탁자 위가 엉망진창이 되는 기분이 들기 시작한다.

어레이를 전송하는 비용. 예, 자주 필요하지 않다는 데 동의합니다. 그러나 예를 들어 여기에서 구체적인 예는 내 지표 입니다. 내부 작업은 선택한 TF에 의존하지 않습니다. 초기화하는 동안 모든 TF(거의 모두)를 업로드하고 고유한 공통 배열(대수 따옴표 배열과 같은 것)을 생성하고 이를 기반으로 몇 가지 더 많은 인덱스 배열을 수행하는 상당히 큰 계산도 수행합니다. TF를 변경할 때마다 동일한 체적 작업을 수행하는 것은 완전히 비합리적이며 TF를 전환할 때 제동이 발생합니다. 아직 구현해야 할 패턴 인식 알고리즘이 머릿속에 남아 있으므로 초기화 계산이 몇 초에 도달할 수 있으며 이 작업이 한 번만 발생하고 잊어버렸으면 합니다.

Демонстрация индикатора ChannelsProf
Демонстрация индикатора ChannelsProf
  • 2016.02.27
  • www.youtube.com
Скоро на экранах ваших мониторов новый индикатор для MT5 ChannelsProf.
 
Stanislav Korotky :

하나의 복사본이 아무것도 알지 못하고 알 필요가 없고 동시에 부작용 없이 작동하려면 커널은 완료된 복사본과 시작하는 복사본 모두에 대해 알아야 하고 적절한 처리 를 제공해야 합니다. /deinit 표준 대기열 비유의 이벤트 . 터미널은 이미 모든 복사본을 추적하고 이벤트 대기열을 사용하지만 어떤 이유로 init/deinit는 이벤트 논리를 위반합니다.

이제 단일 이벤트 대기열이 없지만 각 기호 기간에 대한 대기열이 있다고 상상해 보십시오. 얼마나 많은 문자-마침표, 너무 많은 대기열.

이제 대기열이 처리되는 순서를 제안하십시오.

 
Slawa :

이제 단일 이벤트 대기열이 없지만 각 기호 기간에 대한 대기열이 있다고 상상해 보십시오. 얼마나 많은 문자-마침표, 너무 많은 대기열.

이제 대기열이 처리되는 순서를 제안하십시오.

대기열은 창의 속성입니다. 문자 기간당 하나의 대기열은 인터페이스 이벤트에 대해 사실이 아닙니다. 그렇다면 마우스 클릭을 어떻게 처리합니까?
 
Ihor Herasko :

1. 인터스레드에 대해. 한 스레드(종료 명령이 제공된 스레드)가 종료될 때까지 다른 스레드는 시작되지 않습니다. 또는 이 모든 것이 하나의 스레드에서 발생하면 훨씬 더 간단합니다. "이전" TF와 관련된 모든 프로그램의 실행을 완료하고 그 후에야 "새" TF에서 프로그램을 시작합니다.

2. 사실이다. MT4에서는 모든 것이 정확히 동일합니다. 그러나 MT5에서는 그렇지 않습니다. 이것이 주제에 대한 것입니다.

3. 그는 전날 직접 그래픽 개체로 작업 할 때 . 일반적으로 아름다움은 하나의 지표가 여전히 존재하고 자체적으로 정리되지 않은 것으로 밝혀졌으며 두 번째 지표는 이러한 객체 위에 그립니다. 그래서 우리는 사용자에게 "TF를 전환할 때 단기 간섭을 관찰하게 될 것"이라고 설명할 것입니다. )))
  • DLL 작업. Deinit를 사용하면 DLL은 생성한 모든 스레드를 중단해야 합니다. 그 다음 표시기의 다음 복사본은 자체적으로 재생성합니다. 이제 표시기의 새 복사본이 이러한 모든 스레드를 생성하려고 시도하고 여전히 실행 중이기 때문에 거부됩니다. 새 표시기는 오류 메시지를 표시하고 작동하지 않습니다. TF를 전환했기 때문입니다. 예, 문제가 해결되었습니다.
  • 1) 이전에 썼던 것처럼 해야 합니다. 축적된 데이터베이스는 주기적으로 파일이나 다른 저장소에 저장해야 합니다. 문제는 없습니다. 파일을 열고, 기록하고, 닫습니다. 이 데이터를 업데이트할 때마다 또는 주기적으로 수행해야 하며 init 및 deinit에서는 수행하지 않습니다. (프로그램을 작성하거나 기사를 작성할 때 주기적으로 작업을 저장합니다.) 그리고 파일 쓰기 실패에 대해 보장하는 것은 불가능합니다. 때로는 중요한 상황에서 안전망을 위해 다음을 수행합니다. 업데이트된 정보는 새 파일에 기록되고, 성공적인 쓰기 후에는 이전 정보가 삭제되고, 새 파일에 기록됩니다. 이름은 이전 이름과 같이 변경됩니다.

    2) 이미 설명했습니다. 각 표시기는 자체 그래프 개체와 함께 작동해야 합니다. 당연히 이미 존재하는 객체가 있는지 확인해야 하고, 이미 존재한다면 이름에 1을 더한다.

    3) 글쎄, 그들은 스스로 해결할 수있는 것을 이미 썼습니다.

    그리고 그것은 전혀 문제가 되지 않습니다. 이것은 고유한 개체 생성, 축적된 정보의 주기적 저장, 완료 후 자체 정리와 같은 프로그램의 정상적인 작동입니다.

     
    Andrey Dik :

    1. 위시리스트입니다. 그러나 당신은 데스크톱 응용 프로그램이 작동하는 방식을 원하므로 원하는 대로 데스크톱 응용 프로그램이 작동하지 않는다고 말했습니다.

    데스크탑 애플리케이션을 무엇이라고 합니까? MT5는 데스크탑용 어플이 아닌듯...

    2. 이야기를 꾸며내지 마세요. MT4와 MT5 모두 onit 및 ondeinit의 실행 순서는 동일합니다. 프로그램이 deinit로 시작하는 것과 같은 것은 없습니다.

    나는 이것을 꾸미는 것이 아니다. 이것은 현재 스레드의 주제입니다. 요점은 MT5에서는 아직 DeInit가 완료되지 않은 인디케이터의 Init가 먼저 실행될 수 있음이 밝혀졌습니다. 있는 즉시. 스레드를 읽지 않았습니까?

    3. 예를 살펴보겠습니다.

    1) 이전에 썼던 것처럼 해야 합니다. 축적된 데이터베이스는 주기적으로 파일이나 다른 저장소에 저장해야 합니다. 문제는 없습니다. 파일을 열고, 기록하고, 닫습니다. 이 데이터를 업데이트할 때마다 또는 주기적으로 수행해야 하며 init 및 deinit에서는 수행하지 않습니다. (프로그램을 작성하거나 기사를 작성할 때 주기적으로 작업을 저장합니다.) 그리고 파일 쓰기 실패에 대해 보장하는 것은 불가능합니다. 때로는 중요한 상황에서 안전망을 위해 다음을 수행합니다. 업데이트된 정보는 새 파일에 기록되고, 성공적인 쓰기 후에는 이전 정보가 삭제되고, 새 파일에 기록됩니다. 이름은 이전 이름과 같이 변경됩니다.

    동일한 파일을 초당 여러 번 업데이트하고 경험을 공유하십시오.

    2) 이미 설명했습니다. 각 표시기는 자체 그래프 개체와 함께 작동해야 합니다. 당연히 이미 존재하는 객체가 있는지 확인해야 하고, 이미 존재한다면 이름에 1을 더한다.

    이름에 1을 더하면 어떨까요? 문제는 화면에 동시에 동일한 표시기의 그래픽 개체가 있지만 다른 복사본이 있다는 것입니다. 기술적으로 충돌이 없습니다. 충돌은 이전 사본이 삭제될 때까지 화면에서 도약을 보는 사용자가 관찰합니다.

    3) 글쎄, 그들은 스스로 해결할 수있는 것을 이미 썼습니다.

    그리고 그것은 전혀 문제가 되지 않습니다. 이것은 고유한 개체 생성, 축적된 정보의 주기적 저장, 완료 후 자체 정리와 같은 프로그램의 정상적인 작동입니다.

    큰 비밀을 하나 말하겠습니다. 터미널 사본 하나에 DLL 사본 하나가 있습니다. 여러 사본을 사용할 수 없습니다.