IBLCK
ボードレベル
目的
現在のプロセスのインタフェースに対する排他的ロックを取得または解放します。
形式
C
unsigned long iblck (int ud, int v, unsigned int LockWaitTime, void * Reserved)
Visual Basic
CALL iblck (ud%, v%, LockWaitTime&)
または
status% = illck (ud%, v%, LockWaitTime&)
対話式制御(使用に関する注意)
iblck v LockWaitTime
入力
ud | ボードユニットデスクリプタまたはボード指標デスクリプタ |
v | インタフェースに対するロックの取得・解放を示します |
LockWaitTime | ELCKエラーを返す前の排他的ロックの有効期限(ミリ秒) |
Reserved | 今後の使用のために予約(現バージョンではNULLのみ有効) |
出力
関数からの戻り値 | Ibstaの値 |
説明
vが1の場合、ドライバは現在のプロセスに対してインタフェースへの排他的ロックを取得します。LockWaitTimeで指定されたタイムアウトの期間内にロックが取得されない場合、コールは失敗しELCKエラーを返します(IbstaにはERR、IberrにはELCKを設定)。
vが0の場合、現在のプロセスが以前に取得したロックを解放します。インタフェースロックはそのロックを取得したプロセスのみが解放できます。vがゼロでプロセスにロックがない場合、コールは失敗し、ELCKを返します。iblckをコールしてインタフェースに対するロックを解放する際、LockWaitTimeは無視されます。
あるプロセスがロックの取得に成功した場合、そのプロセスによる、そのインタフェースに対するすべてのGPIBコールは、正常に動作します。
プロセスがロックの取得に成功した場合、そのインタフェースの別のプロセスによるGPIBコール(iblckとボードレベルのibfindを除く)はすべて、直ちにELCKで失敗します。他のプロセスによるiblckコールは、ロックの取得を試みますが、タイムアウト時間が経過後のみ、コールはELCKで失敗します。ボードレベルでのibfindコールはELCKエラーを返しますが、有効なユニットデスクリプタを返します。
インタフェースのロックは、排他性がありプロセス間での共有はできません。あるプロセスがロックの取得に成功した場合、他のプロセスはそのインタフェースへのロックを取得することはできません。
プロセスは、1つのインタフェースに対し、複数の(重複した)ロックを取得することができます。ドライバはインタフェースごとの有効なロック数のリファレンスカウントを保持し、リファレンスカウントが0になるまではインタフェースのロックを解除しません。iblckコールが成功した場合、つまり、ERRがIbstaに設定されない場合には、v値とは無関係に、Ibcntにはudに対して影響を持つ残りのロックの数が含まれます。
インタフェースへのロックは、プロセスとGPIBインタフェースに関連付けられています。取得されたロックは、ロックが解放されるまで有効です。iblckをコールし、ロックを複数回取得した場合、そのロック数と同じ回数のロック解放コールが必要です。ibonl (0または1)を呼び出すと、udで指定されたインタフェースのプロセスでのすべてのインタフェースロックが解除されます。
LockWaitTimeが0の場合、待機時間が0msであることを示します。他のプロセスがインタフェースをロックしている場合、iblckは直ちにELCKエラーを返します。エラーを返さない場合、そのプロセスはロックを取得して戻ります。
発生する可能性のあるエラー
EARG | vは0または1ではないか、ReservedはNULLではありません。 |
ECAP | udのロックリファレンスカウントが最大に達したため、要求されたロックを取得できません。 |
EDVR | NI-488.2ドライバの構成またはインストールが正しくありません。 |
EHDL | udが無効または範囲外です。 |
ELCK | 別プロセスがそのインタフェースをロックがしているため、要求したロックをタイムアウト期間内で取得できません。または、プロセスにはudに対するロックがないため、ロックを解放できません。 |
ENEB | インタフェースが取り付けられていないか、正しく構成されていません。 |
EOIP | 非同期I/Oの処理中です。 |