如果我用DFTACTGRP(* NO)創建ILE RPG程序,我的理解是程序會一直保留在內存中,直到激活組被破壞。如果我在LR關閉的情況下退出程序,變量是否會在下一次調用時重新初始化,或者它們是否保存其值?ILE RPG程序變量值可以在呼叫之間保留在內存中嗎?
回答
簡答
不,他們沒有得到重新初始化,除非ACTGRP(*New)
設置或者你收回激活組在一些其他的方式。
長的答案 *INLR
是RPG週期的函數,而不是激活組,並預期應主要功能(除了程序沒有被卸載),只要您使用的是循環主程序。對於線性主節目,所有投注都關閉。該手冊指出,線性模塊中依賴於循環的功能「可能未指定」。該文檔沒有直接明確指出*INLR
在線性模塊中不能正常工作,但是,您需要知道*INLR
與循環相關,並且線性模塊不包含循環。線性模塊是使用MAIN
或NOMAIN
關鍵字的模塊。有意思的是,還有其他的東西可以控制變量初始化以及(或者代替)LR
。
如果使用ACTGRP(*NEW)
,程序啓動時會創建一個新的激活組,並在程序結束時隱式結束。因此,每次LR
處於打開或關閉狀態,甚至程序是循環主程序還是線性主程序時,都會關閉程序。
如果您使用已命名的激活組或ACTGRP(*CALLER)
,並且調用方正在指定的激活組中運行,並且在激活組中的所有程序結束時手動回收激活組,則字段將被初始化。 RCLRSC
在這裏沒有影響。
如果您使用默認激活組或ACTGRP(*CALLER)
並且調用者正在默認激活組中運行,並且手動RCLRSC
,則字段將被初始化。 RCLACTGRP
在這裏沒有影響。小心,這可能會導致問題。
最後,這全部只適用於全局範圍內的變量。本地作用域變量(在子過程中定義的那些變量)始終在條目中初始化,並在返回時釋放,除非它們被定義爲靜態。靜態局部變量的行爲與全局變量相似。也就是說,它們在第一次調用過程期間被分配和初始化,並在呼叫中保持不變。
線性主模塊表現爲與全局變量無關的模塊。全局變量在程序第一次在模塊中被調用時被初始化,並且它們永遠不會被重新初始化。 https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzasd/cycvslinear.htm
感謝您爲我們的討論做出貢獻,這是我第一次遇到術語'線性主模塊',並且有興趣研究您提供的鏈接。 – mike
- 1. ILE RPG程序將無法編譯
- 2. SIP呼叫的媒體地址可以在呼叫中改變嗎?
- 3. 變量可以在Python中的while循環中保留以前的值嗎?
- 4. GDI - 我可以在WM_PAINT調用之間將位圖保存在內存中嗎?
- 5. 呼叫內的可變
- 6. 的JavaScript變量值可以存儲在PHP變量中嗎?
- 7. ILE RPG - 如何將時間值轉換爲數值?
- 8. 呼叫可變JS在URL
- 9. 呼叫可變
- 10. 呼叫可變
- 11. 我可以在內部呼叫路由嗎?
- 12. 是否可以在內存中保留空間以減少加載時間?
- 13. 分析RPG中的SQL語句ILE CGI網絡程序
- 14. 在「FreeLibrary」之後在內存中保留一個字符串值
- 15. 程序集 - 我可以在程序中聲明變量嗎?
- 16. 是否可以在IOS應用程序中處理GSM呼叫?
- 17. 在Javascript中保留初始變量值
- 18. 如何在javascript中保留變量值
- 19. 在PHP函數中保留變量值
- 20. 如何在Jenkins中保留變量值
- 21. 我可以在環境變量中保存git憑據嗎?
- 22. Java EE應用程序可以進行HTTP呼叫嗎?
- 23. 在R中增加自己的呼叫向量 - 在值之間查找計數
- 24. 呼叫從可變
- 25. extern float在應用程序之前保留了以前的值
- 26. 在呼叫之間是否存在保持處理器狀態的機制
- 27. 在會議之間移動呼叫UCMA4
- 28. 當創建ILE RPG程序爲什麼要默認避免
- 29. 外焦可以停止呼叫嗎?
- 30. 在頁面之間保留表單值
謝謝@jmarkmurphy瞭解詳細的答案。如果我用inz聲明初始化變量會發生什麼。每次程序被調用時它會被設置爲這個值還是第一次被加載到內存中。即inz聲明會覆蓋上次調用的值還是保留前一個調用的值? – mike
同樣的答案。 'Inz'只是決定了程序何時初始化時變量初始化的內容。 – jmarkmurphy
你的答案是我從閱讀有關激活組的預期內容。但是,當進行反彙編時,我會重複地從測試工具中調用它,並且每次程序運行時都會重新初始化變量。該程序在命名的激活組中運行。代碼位於模塊中,並在目標版本V7R1M0上編譯。我不確定我能做些什麼來找出什麼是重新初始化變量。 – mike