Archived: NI-DAQは複数の異なる作業を同時に実行できるようなマルチスレッドのDLLでしょうか。

This document has been archived and is no longer updated by National Instruments



使用ソフトウェア: Driver Software>>NI-DAQ
使用ソフトウェア・バージョン: N/A
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: N/A

問題: NI-DAQは複数の異なる作業(あるいはスレッド)を同時に実行できるでしょうか。また、nidaq32.dllはマルチスレッドのDLLでしょうか。

解決策: まず、複数の異なる作業を行うこととマルチスレッドには違いがあります。同時に二つのスレッドがひとつのDLLにアクセスすることが許されません。しかし、二つの作業を同時に実行することにはまったく問題はありません。複数のスレッドの共有リソースへのアクセスを同期させるMutex(Mutual Exclusion)オブジェクトがありますが、このMutexオブジェクトはあるひとつのスレッドが共有リソースを利用している間他のスレッドのアクセスをブロックします。一つ目のスレッドが終わってから初めて二つ目のスレッドのアクセスを許します。一方、複数の非同期作業を行うことはDAQカードで問題なく実現できます。

特にDLLを利用してすぐ返されない関数を実行する場合はリソース占有問題が起こります。例えば、DIO Buffer Read.viを使用して1000ポイントを集録するとした場合、1000ポイントのデータをすべて集録し終えるまでは関数が返されることはありません。なぜなら、このVIは同期作業を行っている。すなわち、この間他の関数あるいはスレッドは同じDLLにアクセスできず、前のVIが使い終わるまで待たなければなりません。これに対して、二つのバッファを用いた非同期入出力を使う場合はポーリングを行うのが普通なので、データが揃うまで待つ必要がなくなります。これは一般にはDig_DB_HalfReady関数をポーリングしデータが準備できたかどうかを調べすぐ返されますので、他の関数のDLLへのアクセスを阻害することはありません。

まとめると、NI-DAQはマルチスレッドDLLではないが、マルチスレッドに対応しています。時間に対してマルチタスクを行うことによって、複数のプロセスを同時に実行されるようになります。



関連リンク:

添付:





報告日時: 03/10/2000
最終更新日: 07/13/2004
ドキュメントID: 1V9DSHDM