こんにちは皆さん、加速度計 (wiimote 内) からデータを取得し、それを処理してグラフ化するアプリケーションを C# で作成しています。Brian Peek の Wiimote ライブラリを使用しているので、イベント ハンドラーを使用してデータを取得しています。
void wiimote_WiimoteChanged(object sender, WiimoteChangedEventArgs e)
{
X = e.WiimoteState.AccelState.Values.X;
Y = e.WiimoteState.AccelState.Values.Y;
Z = e.WiimoteState.AccelState.Values.Z;
}
100Hz のレートでデータをグラフ化/保存/処理したいので、タイマー オブジェクト (WiiTimer) を作成し、「Tick Interval」を 10ms に設定し、タイマーのすべてのティックで、データが保存/処理されます。
private void WiiTimer_Tick(object sender, EventArgs e)
{
//Signal Processing (Some median and low pass filtering etc.) Ive removed the code for that since it is irrelevant here
sw.WriteLine((X * 9.8).ToString() + ", " + (Y * 9.8).ToString() + ", " + (Z*9.8).ToString() );
//Write Processed Data to file
}
ここでの問題は、信号処理に時間がかかるため、データが実際には 100Hz で保存されないことです。タイマーは OnTick イベント ハンドラを 10ms ごとに呼び出すことができません。したがって、データの保存速度は、コードを実行しているマシンの速度、実行している他のプログラムの数などによって異なります。
これを解決するにはどうすればよいですか?別のスレッドでタイマーを実行することを考えましたが、他の問題が発生する可能性があります。誰かがここで別の質問を指摘したように:レースコンディション。」
何か案は?