ノンブロッキング モードとは ?
IWeb インターフェイスを例にして、ノンブロッキング モード (非同期処理) を説明します。
IWeb インターフェイスを使用してウェブサーバーからデータを取得する手順は、 以下のようになります。
- IWEB_GetResponse 関数を呼び出します。
- ネットワークからデータの取得を完了せずに IWEB_GetResponse 関数は終了します。
- 呼び出し元はアプリの処理を継続します。
- ネットワークからデータの取得が完了した時点で、コールバック関数が呼び出されます。
- コールバック関数中で IWEBRESP_GetInfo 関数を呼び出し、データを取得します。
IWEB_GetResponse 関数は、ノンブロッキング モードで動作する関数であるため、 ネットワークからデータの取得を完了せずに終了し、 呼び出し元はアプリの処理を継続します。 その後、ネットワークからデータの取得が完了した時点で、 コールバック関数が呼び出されます。 このように、ネットワークからデータを取得する処理など時間の掛かる処理でも、 アプリの動作が停止することはありません。
これに対して、IWEB_GetResponse 関数がブロッキング モード (同期処理) で動作すると仮定しますと、 上記の手順は以下のようになります。
- IWEB_GetResponse 関数を呼び出します。
- ネットワークからデータを完全に取得するまで IWEB_GetResponse 関数は終了しません。
- 呼び出し元は、IWEB_GetResponse 関数の終了を待ち続けます。
このように、ブロッキング モードで動作した場合は、 ネットワークからデータを完全に取得するまで、 呼び出し元の処理が停止してしまいます。この間、アプリの動作は停止します。
【注意】
IWEB_GetResponse 関数は、ブロッキング モードで動作することはありません。 ブロッキング モードをノンブロッキング モードと比較するために、 例として説明しています。