10.6 メッセージの待ち合わせ
メッセージがキューに到着するまでアプリケーションで待ち合わせしたい場合は,MQGMO構造体のOptionsフィールドにMQGMO_WAITを指定してください。MQGET命令の待ち合わせ最大時間(ミリ秒)は,MQGMO構造体のWaitIntervalフィールドに設定します。
待ち合わせ最大時間内にメッセージが到着しない場合,MQGET命令はMQRC_NO_MSG_AVAILABLEの理由コードで完了します。
WaitIntervalフィールドにMQWI_UNLIMITEDを指定すると,無制限に待つことができます。しかし,ユーザの制御外にあるイベントによってアプリケーションが長く待たされることもあるので,この定数を使用する場合は注意してください。また,無制限に待ち合わせている間にアプリケーションまたはOpenTP1を終了させた場合,MQGET命令は理由コードMQRC_Q_MGR_STOPPINGで完了します。
- 注意
-
複数のアプリケーションが同じ共用キューについてメッセージの削除を待ち合わせる場合,メッセージの到着が有効になるアプリケーションは一つだけです。しかし,複数のアプリケーションがメッセージの検索を待ち合わせる場合,すべてのアプリケーションで有効になります。
待ち合わせ最大時間が経過する前に,キューまたはキューマネジャの状態が変わる場合は,次に示すとおりに動作します。
-
キューマネジャが強制停止させられると,MQGET命令はMQRC_Q_MGR_STOPPINGまたはMQRC_CONNECTION_BROKENの理由コードで完了します。
-
キューの属性(別名キューの属性を含む)が変更されて取り出しが禁止された場合,待ち合わせは中断され,MQGET命令はMQRC_GET_INHIBITEDの理由コードで完了します。