2.2.2 非同期処理の完了確認

<この項の構成>
(1) 簡易クラスでの非同期処理完了確認
(2) 詳細クラスでの非同期処理完了確認

(1) 簡易クラスでの非同期処理完了確認

非同期処理の完了を待つには,DBRDatabaseクラスとDBRResultSetクラスのWaitForDataSourceメソッドを使用します。このメソッドが呼び出されると,メソッドが呼び出されたオブジェクトで実行中の非同期処理すべてが終わるまで待ちます。

(例) WaitForDataSourceメソッドによる完了待ち

if(pDB1->WaitForDataSource())   // 非同期処理が終わるまで待つ
{
printf("非同期で要求した処理が終了しました");
}

非同期処理の完了を確認するには,InWaitForDataSourceメソッドを使用します。

DBRDatabaseクラスの場合,Databaseオブジェクトに関係するすべてのResultSetオブジェクトのアクセス完了を意味し,DBRResultSetクラスの場合,単独のResultSetオブジェクトのアクセス完了を意味します。

また,DBRDatabaseクラスのInExecuteメソッドでも確認することができます。

例えば,DatabaseオブジェクトのExecuteDirectメソッドの処理は終了していても, ResultSetオブジェクトのExecuteメソッドが実行中ならば,InWaitForDataSourceメソッドはTRUEを返します。

(例) InWaitForDataSourceメソッドによる完了確認

if(pDB1->InWaitForDataSource())
{
 printf("非同期処理要求が残っています");
 if(pDB1->WaitForDataSource(10000))            // 10秒待つ
 {
    printf("非同期処理がすべて終了しました");
 }
 else
 {
   printf("10秒経ちましたが,非同期処理継続中です。
                                         終了までお待ちください。");
   pDB1->WaitForDataSource();    // 非同期処理が終わるまで待つ
 }
}

(2) 詳細クラスでの非同期処理完了確認

非同期処理の完了を待つには,各クラスのWaitForDataSourceメソッドを使用します。このメソッドが呼び出されると,メソッドが呼び出されたオブジェクトで実行中の非同期処理すべてが終わるまで待ちます。

(例) WaitForDataSourceメソッドによる完了待ち

    if(pStatement->WaitForDataSource())
                                      // 非同期処理が終わるまで待つ
    {
     printf("非同期で要求した処理が終了しました");
    }

非同期処理の完了を確認するには,DBConnectionオブジェクトのInWaitForDataSourceメソッドや各クラスのInExecuteメソッドを使用します。これは, DBConnectionクラスのメソッドに限らず,どのクラスのメソッドであっても,そのDBConnectionオブジェクトから生成されたオブジェクトのメソッドでデータベースアクセス中であれば,TRUE(非同期処理継続中)が返ります。

例えば,DBConnectionオブジェクトのExecuteDirectメソッドの処理は終了していても, DBStatementオブジェクトのExecuteメソッドが実行中ならば,InWaitForDataSourceメソッドはTRUEを返します。

(例) InWaitForDataSourceメソッドによる完了確認

    if(pConnect->InWaitForDataSource())
    {
      printf("非同期処理要求が残っています");
      if(pConnect->WaitForDataSource(10000)) {      // 10秒待つ
        printf("非同期処理がすべて終了しました");
      } else {
        printf("10秒経ちましたが,非同期処理継続中です。
                                        終了までお待ちください。");
        pConnect->WaitForDataSource()
                                //非同期処理が終わるまで待つ
      }
    }