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

 
Aleksei Radchenko :


터미널을 1065 버전으로 업데이트해 보세요. 이전 버전에서는 타임프레임 변경 시 재초기화 오류가 발생했습니다. 도움이 될 수 있습니다 :)

https://www.mql5.com/ru/forum/187690


터미널 5.00 b1571이 있습니다.
 
예를 들어 전역 변수의 값을 어딘가에 저장할 수 있습니다. 다시 읽은 후 변수를 읽고 복원하십시오.
 
Andrey Dik :
예를 들어 전역 변수의 값을 어딘가에 저장할 수 있습니다. 다시 읽은 후 변수를 읽고 복원하십시오.


그러면 Deinit는 작업을 완료하고 모든 것을 망칠 것입니다. 일반 Init 및 Deinit에서 사용자 정의 init 및 deinit를 만드는 것은 의미가 없습니다.

또한이 문제에 직면했습니다. (

 
Sergey Chalyshev :


그러면 Deinit는 작업을 완료하고 모든 것을 망칠 것입니다. 일반 Init 및 Deinit에서 사용자 정의 init 및 deinit를 만드는 것은 의미가 없습니다.

또한이 문제에 직면했습니다. (


전적으로 동의합니다(일반 Init 및 Deinit에서는 의미가 없음)
 
Vasiliy Pushkaryov :


그래픽 개체에 이름 접두사의 구성 요소로 마침표 TF를 할당하려고 할 수 있습니다.

다음과 같이 적용하십시오.


답변 해주셔서 감사합니다

예, 이와 같은 작업을 수행해야 했지만 이것은 부분적인 해결 방법입니다.

변수의 경우 리소스나 파일을 통해서도 가능하지만 MT5를 수정하여 피할 수 있었던 별도의 추가 리소스입니다.

불필요한 부가 기능, 검사 등으로 코드를 어지럽힙니다. (F를 통해....)

 

나는 항상 TF를 변경할 때 이전 TF에서 초기화를 취소한 다음 새 TF에서 초기화한다고 항상 생각했습니다. 이것은 이벤트의 논리적 과정이며 Expert Advisors 및 지표를 만들 때 이 논리에 의존했습니다. 그런 다음 일련의 사건을 위반하여 그런 말도 안되는 것으로 판명되었습니다 ...
작업을 하다보면 가끔 그래프와 그래프에 뭔가 문제가 있음을 눈치챘습니다. 모든 것이 정상적으로 표시되도록 TF를 여러 번 전환해야 했습니다.


이제 코드를 이해할 필요가 있습니다. 여기서 deinites에서 무언가가 변경되고 inits에서도 다시 변경됩니다. 하지만 순서는 반대입니다!!! 논리가 아니라 주석. 누가 이것을 생각해 냈습니까?

마음에 오는 첫 번째 일은 내 deinit에 glob에 암기가 있다는 것입니다. 이전 상태의 변수(버튼을 눌렀다 떼었다)를 초기화하고 초기화 버튼을 누르면 저장된 값에 따라 설정됩니다. 그리고 내가 항상 올바르게 다시 설치하지 않는 것은 정확히 버튼입니다. 이것이 내가 기억한 첫 번째 것입니다. 아마도 다른 것을 찾을 것입니다 ... 내일 파헤 치겠습니다.


개발자 덕분에 작업을 던졌습니다 ...

 

Deinit 에서 모든 데이터의 기록을 globals에 등록합니다. 동시에 GlobalVariableSetOnCondition을 통해 하나의 전역을 세마포어로 설정합니다.

Init에서 세마포어가 "데이터 재설정" 상태에 있으면 세마포어를 "모두 읽기" 상태로 설정하여 읽고 작업한다고 작성합니다.

세마포어가 "명확하지 않은" 상태에 있으면 우리는 단순히 세마포어를 기다립니다(루핑된 Sleep 또는 OnTimer를 통해).


물론 세마포어가 완전히 없으면 이는 우리가 처음으로 시작했고 미래의 TF 변경 사항이 아닌 세마포어를 동시에 생성하여 모든 것을 고려한다는 것을 의미합니다.


그러한 구현에서 어려운 점은 무엇입니까? 한 번 라이브러리는 처방하고 그게 다야.

 
fxsaber :

Deinit 에서 모든 데이터의 기록을 globals에 등록합니다. 동시에 GlobalVariableSetOnCondition을 통해 하나의 전역을 세마포어로 설정합니다.

Init에서 세마포어가 "데이터 재설정" 상태에 있으면 세마포어를 "모두 읽기" 상태로 설정하여 읽고 작업한다고 작성합니다.

세마포어가 "명확하지 않은" 상태에 있으면 우리는 단순히 세마포어를 기다립니다(루핑된 Sleep 또는 OnTimer를 통해).


그러한 구현에서 어려운 점은 무엇입니까? 한 번 라이브러리는 처방하고 그게 다야.

그런 문제가 있는지도 몰랐습니다. 나는 deinit-init 시퀀스를 기대하고 있었고 그 반대도 마찬가지였습니다. 문제를 알면 해결할 수 있습니다. 그러나 이것은 각 프로그램에 지금 대체해야 할 목발이 아니라 터미널 논리 수준에서 결정되어야한다고 생각합니다 ...
 
elibrarius :
그런 문제가 있는지도 몰랐습니다. 나는 deinit-init의 시퀀스를 기대했고 그 반대도 마찬가지였습니다. 문제를 알면 해결할 수 있습니다. 그러나 이것은 각 프로그램에 지금 대체해야 할 목발이 아니라 터미널 논리 수준에서 결정되어야한다고 생각합니다 ...
이것은 목발이 아니라 간단한 해결책입니다. 유일한 질문은 그것을 구현하는 사람(개발자 또는 사용자)입니다. 그리고 거기에 시간을 보내고 한 번 써야합니다. 사용자가 할 수 있으면 작성한 것이고 더 이상 문제에 대해 걱정하지 마십시오. 방금 스레드를 읽고 즉시 해결책을 찾았습니다. 그러면 무엇을 미루겠습니까? 오랫동안 무언가를 요구할 수도 있고, 빠르게 직접 작성할 수도 있습니다.
 
fxsaber :
이것은 목발이 아니라 간단한 해결책입니다. 유일한 질문은 누가 그것을 구현하느냐 - 개발자 또는 사용자입니다. 그리고 거기에서 시간을 보내고 한 번 써야합니다. 사용자가 할 수 있으면 작성한 것이고 더 이상 문제에 대해 걱정하지 마십시오. 방금 스레드를 읽고 즉시 솔루션을 찾았습니다. 그러면 무엇을 미루겠습니까? 오랫동안 무언가를 요구할 수도 있고, 빠르게 직접 작성할 수도 있습니다.
공통 문제를 해결하는 소규모 사람들의 수를 곱하면(한계에서 무한한 횟수 ;-)) 터미널 자체의 편집 옵션에 필요한 시간. 가상의 라이브러리가 있다고 해서 모든 사람이 라이브러리의 존재와 사용 필요성을 인식하게 되는 것은 아닙니다. 일반적으로 그러한 "갈퀴"를 만들고 떠나는 이유가 명확하지 않습니까?