Hitachi

COBOL2002 ユーザーズガイド


26.4.1 COBOL以外のプログラムからの呼び出しによる方法

COBOLプログラム以外のプログラムを入り口としてスレッドを開始して,そのプログラムから間接的にマルチスレッド対応COBOLプログラムを呼び出せます。

この方法では,スレッド内で最初に呼ばれるCOBOLプログラムが,COBOL主プログラムの場合と,COBOL副プログラムの場合とで,プログラム終了時の動作が異なります。COBOL主プログラムと副プログラムについては,「18.3 COBOL主プログラムと副プログラム」を参照してください。

〈この項の構成〉

(1) COBOL主プログラムの場合

-MainNotCBLオプションを指定しないでコンパイルしたプログラムがスレッド内で最初に実行された場合,COBOL主プログラムになります。

COBOL主プログラムを終了させるには,STOP RUN文を実行します。これによって,COBOL実行環境が終了し,スレッドが終了されます。このとき,RETURN-CODE特殊レジスタの値がスレッドの終了コードになります。

(2) COBOL副プログラムの場合

-MainNotCBLオプションを指定してコンパイルしたプログラムは,スレッド内で最初に実行した場合でも,常にCOBOL副プログラムとなります。

COBOL副プログラムは,呼び出し元のプログラムに復帰できます。このとき,COBOL実行環境は保持されます。そのため,呼び出し元のプログラムは,スレッドが終了する前にCOBOL実行環境を終了させる必要があります。COBOL実行環境を終了させるには,CBLENDサービスルーチンを呼び出します。

図26‒1 COBOL以外のプログラムからの呼び出しの例

[図データ]

なお,この方法でマルチスレッド対応COBOLプログラムを呼び出した場合,呼び出し元のプログラムで例外ハンドラを登録して,例外処理できます。このとき,例外ハンドラブロックでCBLDBGINFサービスルーチンを呼び出せば,COBOLの異常終了時要約情報リストを出力できます。CBLDBGINFサービスルーチンの詳細は,「30.6.1 CBLDBGINF」を参照してください。