改善、改善、さらに改善! [プログラミング]
仕事で長い事取り組んでいるプログラミングで、幾つもの改善、改良を重ね、仕様追加に対応してきました。
本日は、各種測定データ ログを一定時間毎にCSV ファイルに書き出しているのですが、時間間隔の計測にWin32APIのSleep( 1000 );のwhile( 1 ){}を行うスレッドで変数をインクリメントしていたので、僅かな誤差が在りました。
24時間試験を行うと、大きな差になってしまう事が問題となりましたので、これを改善しました。
DWORD time_thread( void *p )
{
previous_time = systime.wSecond;
while( 1 )
{
Sleep( 1 );
GetLocalTime( &systime );
if( systime.wSecond != previous_time )
{
previous_time = systime.wSecond;
time++;
}
}
return( 0 );
}
確かこのような感じで書いたと思います。
このタイマーはその他様々に使用しております。
データ ログ ファイルには、データ番号、日付、時刻、多数のデータなどを書き込みます。
この時間間隔や時刻情報が他の測定機材の時刻とずれてはまずい訳です。
ところで、私はプログラマーではございません。
回路設計技術者を志しております。
病気に倒れる前、回路設計CAD, プリント基板設計CADを使いました。
昨日と今日はAutoCADを使ってみております。
Blenderの方が使い易いじゃないかと思う部分も在りました。
ですが、もちろん目的が異なり、機能も異なっているので文句は言えません。
次はSpiceで回路シミュレーションを覚えなければなりませんね。
ああ、ロッテリアの絶品チーズバーガーを食べたいなぁ。。。
本日は、各種測定データ ログを一定時間毎にCSV ファイルに書き出しているのですが、時間間隔の計測にWin32APIのSleep( 1000 );のwhile( 1 ){}を行うスレッドで変数をインクリメントしていたので、僅かな誤差が在りました。
24時間試験を行うと、大きな差になってしまう事が問題となりましたので、これを改善しました。
DWORD time_thread( void *p )
{
previous_time = systime.wSecond;
while( 1 )
{
Sleep( 1 );
GetLocalTime( &systime );
if( systime.wSecond != previous_time )
{
previous_time = systime.wSecond;
time++;
}
}
return( 0 );
}
確かこのような感じで書いたと思います。
このタイマーはその他様々に使用しております。
データ ログ ファイルには、データ番号、日付、時刻、多数のデータなどを書き込みます。
この時間間隔や時刻情報が他の測定機材の時刻とずれてはまずい訳です。
ところで、私はプログラマーではございません。
回路設計技術者を志しております。
病気に倒れる前、回路設計CAD, プリント基板設計CADを使いました。
昨日と今日はAutoCADを使ってみております。
Blenderの方が使い易いじゃないかと思う部分も在りました。
ですが、もちろん目的が異なり、機能も異なっているので文句は言えません。
次はSpiceで回路シミュレーションを覚えなければなりませんね。
ああ、ロッテリアの絶品チーズバーガーを食べたいなぁ。。。
2012-08-22 20:42
コメント(0)
トラックバック(0)
コメント 0