DFTACTGRP (* NO)를 사용하여 ILE RPG 프로그램을 작성하는 경우, 활성 그룹이 소멸 될 때까지 프로그램이 메모리에 남아 있습니다. LR 스위치를 끄고 프로그램을 종료하면 다음 호출시 변수가 다시 초기화되거나 값이 유지됩니까?ILE RPG 프로그램 변수 값이 호출간에 메모리에 남아있을 수 있습니까?
답변
짧은 대답 ACTGRP(*New)
이 설정되어 있지 않으면
아니, 그들은 다시 초기화되지 않습니다 또는 당신은 다른 방법으로 기동 그룹을 확보.
긴 대답 *INLR
하지 활성화 그룹으로의 RPG주기의 함수이며, 예상대로 대부분 작동합니다 (프로그램이 언로드되지 제외), 같은 당신이주기의 주요 프로그램을 사용하고있다. 선형 메인 프로그램의 경우 모든 베팅이 꺼져 있습니다. 매뉴얼에는 선형 모듈에서 사이클에 종속 된 기능이 "지정되지 않을 수 있습니다"라고되어 있습니다. 이 문서에서는 선형 모듈에서 *INLR
이 예상대로 작동하지 않는다는 것을 직접 나타내지는 않지만 *INLR
이주기에 연결되어 있고 선형 모듈에주기가 포함되어 있지 않다는 것을 알아야합니다. 선형 모듈은 MAIN
또는 NOMAIN
키워드를 사용하는 모듈입니다. 부수적으로, 변수 초기화뿐만 아니라 (또는 대신) LR
을 제어하는 다른 것들이 있습니다.
을 사용하면 프로그램이 시작될 때 새 활성 그룹이 작성되고 프로그램이 종료 될 때 내재적으로 종료됩니다. 따라서 프로그램은 LR
이 켜지거나 꺼질 때마다 또는 프로그램이주기 메인 프로그램인지 또는 선형 메인 프로그램인지 여부에 상관없이 항상 닫힙니다.
이름 지정된 활성 그룹 또는 ACTGRP(*CALLER)
을 사용하고 호출자가 이름 지정된 활성 그룹에서 실행 중이고 활성 그룹의 모든 프로그램이 종료 될 때 수동으로 활성 그룹을 재개하면 필드가 초기화됩니다. RCLRSC
은 여기에 아무런 영향을 미치지 않습니다.
기본 활성 그룹 또는 ACTGRP(*CALLER)
을 사용하고 호출자가 기본 활성 그룹에서 실행 중이고 수동으로 RCLRSC
인 경우 필드가 초기화됩니다. RCLACTGRP
은 여기에 아무런 영향을 미치지 않습니다. 조심하십시오. 문제가 발생할 수 있습니다.
마지막으로이 옵션은 전역 범위의 변수에만 적용됩니다. 서브 - 프로 시저 내에서 정의 된 로컬 스코프 변수는 정적으로 정의되지 않는 한 항상 입력시 초기화되고 반환 될 때마다 해제됩니다. 정적 지역 변수는 전역 변수처럼 동작합니다. 즉, 프로 시저의 첫 번째 호출 중에 할당되고 초기화되며 호출간에 지속됩니다.
선형 기본 모듈은 전역 변수와 관련하여 노움 모듈처럼 동작합니다. 전역 변수는 프로 시저가 모듈에서 처음 호출 될 때 초기화되며 다시 초기화되지 않습니다. https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzasd/cycvslinear.htm
이번 토론에 참여해 주셔서 감사 드리며, 처음으로 선형 모듈 (linear-main module)이라는 용어를 발견하게되었습니다. 귀하가 제공 한 링크를 연구하는 데 관심이 있습니다. – mike
자세한 답변은 @jmarkmurphy. inz 선언으로 변수를 초기화하면 어떻게됩니까? 프로그램이 호출 될 때마다 또는 메모리에 처음로드 될 때마다이 값으로 설정됩니까? 나는. inz 선언은 마지막 호출의 값을 덮어 쓰거나 이전 호출의 값을 유지합니까? – mike
같은 답변입니다. 'Inz'는 프로그램이 초기화 될 때 초기화되는 변수를 결정합니다. – jmarkmurphy
귀하의 대답은 제가 인증 그룹에 대해 읽었을 때 기대했던 것입니다. 그러나 디버깅을하지 않으면 테스트 하니스에서 반복적으로 호출하고 프로그램을 실행할 때마다 변수를 다시 초기화합니다. 프로그램은 명명 된 활성 그룹에서 실행됩니다. 코드는 모듈에 있으며 목표 릴리스 V7R1M0에서 컴파일됩니다. 변수를 다시 초기화하는 방법을 알아 내기 위해 내가 무엇을 할 수 있는지 잘 모르겠습니다. – mike