サンプリングは、停止条件が満たされるか、指定したバッファ領域の最後まで転送し終わるか、またはCntSamplingStop 関数により強制停止された場合に停止します。
サンプリングが完了したことを確認するために、以下の2つの方法があります。
CntSetSamplingStopEvent
関数により、サンプリング停止時に設定した割り込みイベントコールバック関数が呼び出されることによってサンプリングの完了を確認します。
サンプリング完了のイベントを受け取ったら、バッファ内のデータを処理してください。
また、CntSetSamplingCountEvent 関数により、サンプリング途中で指定個数のサンプリングが完了したことを通知することも可能です。
CntGetSamplingStatus 関数によって取得したステータスの、CNTS_STATUS_BMSTOP と CNTS_STATUS_CNTSTOP の両方を監視することにより、サンプリングの完了を確認します。
CntGetSamplingCount 関数により、サンプリング途中で現在のサンプリングデータ数を取得することが可能です。
2つの方法に共通することですが、高速のサンプリングを行っている途中に、デバイスに対するアクセスを行うと、 サンプリングが中断する恐れがあります。
CntSetSamplingCountEvent
関数の通知個数が少ない場合、割り込みが頻発しますし、CntGetSamplingStatus
関数、CntGetSamplingCount
関数の呼び出しによってもサンプリングは一時中断されます。
高速サンプリングで転送エラーが発生する場合、CntSetSamplingCountEvent 関数の通知個数パラメータを大きくする、またはCntGetSamplingStatus 関数、CntGetSamplingCount 関数の呼び出し回数を減らすなどの対策を行ってください。
サンプリングデータの処理や次の転送準備に入る前に、必ず、いずれかの方法で転送が完了していることを確認してから、次の処理を開始するようにしてください。(CntSamplingStop を使用した場合も同様です)
スレッド内で(CntSamplingSetBuffer)を使用してサンプリング用のバッファをセットした場合、
スレッド終了時に、メモリのロックが解除され、サンプリングを強制停止するため、サンプリングが完了するまでスレッドを終了しないでください。