ボラタイル。使わんね。。
ポーリングをwhileとsleepで回すとか正気の沙汰か。
一定間隔でイベントループを走らせるAPIを使った方が安心。
組み込み系でCしか使えないなら仕方ないのかもしれないけど。。
※volatileの使いどころ
while(i==0)
{
//iは変更しない処理
}
↑と↓は、iに対して変更が無いため、コンパイラに等価と判断される。
つまり、↑のコードをコンパイルすると↓に最適化され、
ループ毎にiが評価されなくなってしまう。
(別ループや別スレッドがiを変更する可能性は考慮されない)
iの宣言でvolatileを付加しておくと、最適化が行われなくなる。
if(i==0)
{
while()
{
//iは変更しない処理
}
}
よくわからないけどマルチスレッドで i は他から操作されるってことかしら?
別スレッドか、別ループからの書き換えが行われます。
たとえば、I/O周りでデータ待ちで使うポーリングを想像してください。