ibnotifyの使用
ibnotify関数は、ユニットデスクリプタ、GPIBイベントのビットマスク、コールバック関数のアドレス、ユーザ定義の参照データを渡されます。ibnotifyには以下のプロトタイプがあります。
C
unsigned long ibnotify (int ud, int mask, GpibNotifyCallback_t
Callback, void * RefData)
Visual Basic (6.0)
CALL ibnotify (ud%, mask%, AddressOf
Callback&, RefData$)
または
status% = ilnotify (ud%, mask%, AddressOf
Callback&, RefData$)
ibnotifyの入力
ud | ボードまたはデバイスデスクリプタ |
mask | 通知するGPIBイベントのビットマスク |
Callback | Callback関数へのポインタ |
RefData | ユーザ定義のコールバック用参照データ |
ibnotifyコールバックには以下のプロトタイプがあります。
C
int __stdcall Callback (int LocalUd, unsigned long LocalIbsta, unsigned long LocalIberr, unsigned long LocalIbcnt, void *RefData) |
Visual Basic (6.0)
Function Callback (LocalUd%, LocalIbsta%, LocalIberr%, LocalIbcnt&, RefData$) |
コールバックパラメータ
LocalUd | ボードまたはデバイスデスクリプタ |
LocalIbsta | Ibstaの値 |
LocalIberr | Iberrの値 |
LocalIbcnt | Ibcntの値 |
RefData | ユーザ定義のコールバック用参照データ |
Callback関数は、ユニットデスクリプタ、NI-488.2グローバル変数の現在値、元のibnotify呼び出しで渡されたユーザ定義の参照データを渡されます。NI-488.2ドライバは、コールバックの戻り値を、それがゼロ以外の値である場合にCallbackを自動的に再登録するために使うmask値として解釈します。
アプリケーションでibnotifyの使用方法のC言語による例を見ることができます。デバイスはマルチメータで、”SEND DATA”を送信しデータを読み取るプログラムと想定してください。読み取り可能になると、マルチメータはサービスを要求します。各読み取り値は浮動小数点値です。
この例では、グローバル関数/変数はCallbackスレッドとメインスレッドで共有され、グローバル関数/変数へのアクセスは同期によって保護されていません。この場合、これらのグローバル関数/変数はアクセスを同期する必要はありません。これは、アプリケーションでシングルスレッドだけがグローバル値に書き込み、そのスレッドは常に情報を追加する(カウントを増分、または浮動小数点数の配列に他の読み取り値を追加する)ためです。
NI-488.2アプリケーション内での非同期イベント通知に関しては、非同期イベント通知の概要を参照してください。より詳しい、ibnotifyに関する情報は、ibnotifyの定義を参照してください。
メモ: ibnotify Callbackは、アプリケーションの他の部分とは別の実行スレッドで実行されます。アプリケーションがibnotifyを使用しながら他のNI-488.2の処理を行う場合、Threadコール(ThreadIbsta、ThreadIberr、ThreadIbcnt)によって提供されるスレッドごとのNI-488.2グローバル関数を使用してください。Callbackでグローバル関数を共有する必要がある場合は、同期プリミティブ(セマフォなど)を使用してグローバル関数へのアクセスを保護してください。同期プリミティブの使用方法に関しては、ご使用の開発環境に付属の同期オブジェクトの使用方法に関するドキュメントを参照してください。 |
関連項目: