他のトピックでデータ待ち行列 (*DTAQ) は読取ると同時に
データ待ち行列のデータそのものが消えてしまうことを紹介した。
確かにそのとおりであり、データ待ち行列 (*DTAQ) は
データを読取るとそのデータは消失してしまう。
では *DTAQ にデータが存在しているのか、確認する方法は
ないのだろうか?
ここで checkDTAQ
という関数を紹介しよう。
実は *DTAQ を読取るときの 11 番目
の任意パラメータ : Remove Message (char(10))
というのがリリース・アップで追加されていて
*YES : | The message is removed from the data queue. This is the default value if this parameter is not specified |
*NO : | The message is not removed from the data queue. |
と追加されている。
つまり *NO
であれば「メッセージは *DTAQ から削除されない」とある。
API : QRCVDTAQ の機能が拡張されているのである。
それを利用したのが次に紹介するサンプル関数: checkDTAQ
である。
checkDTAQ
は QTEMP/VTDTAQ *DTAQ にデータがあれば TRUE を返し、
データが何もなければ FALSE を返す。
/******************/ int checkDTAQ(void){ /******************/ _Decimal(5,0) data_len = 0; _Decimal(5,0) wait = 0; _Decimal(3,0) key_len = 0; _Decimal(3,0) sender = 0; _Decimal(5,0) data_rec= 0; char dataq_buf[100]; QRCVDTAQ("VTDTAQ ", "QTEMP ", &data_len, &dataq_buf, wait, " ", key_len, "", /*KEY*/ sender, "", /*SENDER*/ "*NO ", data_rec, &errcode); if(data_len > 0) return TRUE; else return FALSE; }