2017-09-11 26 views
2

私は最近、* inlr = * onがファイルの明示的なクローズ(以下のコード)の後に使用されるサービスプログラムを見つけました。それは私のためにむしろ過度に感じる。私が見つけたものから、リソースの解放を処理するRPGサイクルです。だからサイクルがないなら(つまり、メイン/ノーミングのh-specsを持つプログラムでは)、* inlr = * onが何らかの効果をもたらす方法はありませんが...私は確認を見つけることができませんでした。サイクルに関連する問題は私には非常に新しいものです。私は何かが欠けているかもしれません...サイクル以外のプログラムで* inlrを設定しても影響はありますか?

if %open(file);  
    close file;   
endif;     
*inlr = *on;    
return *on; 
+0

* inlr = *をオンにしても、パフォーマンスが大幅に変化することさえありません。サービスプログラムの署名を変更したり、サービスプログラムを呼び出すすべてのプログラムが中断したりすることがないように、サービスプログラムのシグネチャを変更しないように、これらを混乱させないでください。 – danny117

+0

'* inlr'はサービスプログラムの署名を変更しません。変更する唯一の方法は、輸出を変更することです。バインダーソースによって生成されるシグネチャーとは異なるものを意味していない限り、パラメーターを変更してもサービスプログラムのシグネチャを変更することはできません。 – jmarkmurphy

答えて

4

「最後のレコード」インジケータは、サイクルでのみ使用されます。これは、NOMAINサービスプログラムまたはリニアMAINプログラムでは使用されません。

RPG IV Programmer's Guide

無しサイクルコードはサブプロシージャー用に生成されていないと言うか、MAINまたはNOMAINは、制御仕様に指定されている場合。それは計算の最後に到達したときに

その他の参考資料
IBMのバーバラ・モリス(post to the RPG mailing listでRPGLEコンパイラ開発者、)

はリニア主な手順は、ちょうど終了します。必要ならばを* INLRに設定できますが、ファイルのクローズのようなサイクル関連のことは行いません。

ここでは、サイクルメインモジュールとリニアメインモジュールの比較を示します。 http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Frzasd%2Fsc09250802.htm "

+1

あなたは10秒で私を打ち負かした – jmarkmurphy

+0

今日の睡眠は 'よ? :) – Charles

+0

これは正しいとは思わない。 MAINプロシージャでも、* LRインジケータは変数をアンロードします。 * LRをオンにしないでプログラムから戻った場合、変数は次の呼び出しで同じ値を保持します。 RPGプログラマー・ガイドでは、「ILE RPGランタイムはデータを管理し、プログラムの終了とデータの再初期化はOPM RPGの場合と同じですが、実際のストレージはOPM RPGプログラム**プロシージャへの以前の呼び出しがLRで終了した場合、または異常終了した場合は、データが再初期化されます。** " – Mike

3
線形メインで

、またはnomainモジュール、*inlrは、私の知る限りでは、4ページの本の明示的な文書が、ILE RPG Programmer's Guideは、ありません。効果はありません

を述べて

注:*inlrをチェックするサイクルの一部であるためなしサイクルコードはサブプロシージャーのために生成されていないか、MAINまたはNOMAIN を制御仕様に指定されている場合

、このI。 nferrs機能なし

-1

はこれを試してください:RPGプログラム

pgm 
    call testlrr 
    call testlrr 
    call testlrr 
    endpgm 

を呼び出すための

CLプログラムこのRPG

ctl-opt dftactgrp(*no) actgrp('QILE'); 

    dcl-pr TESTLRR extpgm('TESTLRR'); 
    end-pr; 

    dcl-pi TESTLRR; 
    end-pi; 

    dcl-s counter  zoned(5:0); 

    counter = counter + 5; 

    dsply counter; 

    return;    

のためにあなたが変数の値をし続けて表示されますその後の呼び出しで増分します。

はい...アクティベーショングループ、inz文などで対処できますが、* inlrはかなり安くて簡単です。

+0

この機会には、サービスプログラムおよび/または線形主プログラムについて質問していました。あなたはサイクルメインプログラムについて話しています。 – Charles

+0

ああ...私は訂正した。 –

関連する問題