ページの先頭行へ戻る
WSMGR ソフトウェア開発キット V9 使用手引書

5.5 SENSE指定のみを使用したアプリケーションの作成方法

メッセージループ/プロシージャでWSAPIのSENSEモードのみを使用してプログラミングすることも可能です。

ただし、SENSE指定の場合には必ずしも処理が成功するとは限りません。その時には、次のような方法でプログラミングする必要があります。SENSEモードのみを使用するプログラミングはWAITモードを使用する場合に比べシステムに負荷をかけることになりますので注意してください。

何かキーが押されたときDUET会話処理をする場合を例に挙げて説明します。

まず、メッセージループは以下のようにします。

/*  メッセージループ  */
while (TRUE){

    ret = PeekMessage(&msg);                              (2)

    if ( ret ==  メッセージ あり) {                      (3)

         TranslateMessage(&msg);
         DispatchMessage(&msg);

    } else {    /*  メッセージ なし */

        if ( /* 受信要求あり */ resp_flag == ON )  {
             ret = XWSI_DC_READ( sense_mode );            (4)
             if ( ret == データ あり )  {
                  SendMessage( RCV_CMP );                 (5)
                  resp_flag = OFF;
             }
    }
                             ↓(続く)

また、メッセージ処理は以下のようにします。

/*  メッセージ処理 */

switch (message)  {
case  WM_COMMAND:
        処理
        break;

case  WM_COMMAND:
        処理
        break;

case  WM_CHAR:                                            (1)
        /*  何かキーが押されたのでデータ送信する */
        XWSI_DC_WRITE();
        /*  ホストからのレスポンス待ちを要求 */
        resp_flag = ON;
        break;

case  RCV_CMP:                                            (6)
        /*  受信完了 */
        受信完了処理
        break;
          ・
          ・
  1. 何かキーが押されたらホストにデータを送信するようDC_WRITE を発行します。この関数はすぐに復帰します。通常、この後にDC_READ をWAITモードで呼び出しますが、このアプリケーションでは受信要求フラグ(resp_flag)をONにしてメッセージループに戻るようにします。

  2. PeekMessage を発行して、アプリケーションに通知されたメッセージを取得します。

  3. 復帰値により、メッセージの有無を判断してメッセージがある場合はその処理を行います。

  4. メッセージがなく、かつメッセージ処理より受信要求がある時は、ホストからのレスポンスがあるかを、DC_READ を発行して調べます。

  5. もしデータがあれば、SendMessage により受信完了メッセージを送ります。

  6. アプリケーションは受信完了メッセージを受け、受信完了処理を行います。

・プログラミングに注意すべき関数

SENSEモードあるいはNO WAITモードのみ使用して、メッセージループ/プロシージャで使用可能な関数には、以下のものがあります。

また、モード指定がなく時間指定ができる関数がありますが、時間指定をした分だけ自アプリケーションが動作できなくなりますので、WSAPIの時間指定を最小限の1~2秒にしておいてください。システムのタイマ処理と組み合わせて使用可能な関数には以下のものがあります。

唯一の例外として、時間指定を充分に取らなければならない関数を以下に示します。

この関数の時間指定は、キー入力可能になることを待ち合わせる応答待ち時間です。時間指定値が小さいと強制終了の形になり処理が中断されてしまうので注意が必要です。

サンプルアプリケーションプログラム WSMAPLでは、応答待ち時間を10秒に設定しています。