-1

私の知る限り、タイマーは非同期で実行されるため、非常に短い期間のタイマーが適用されると、前の呼び出しが終了していない場合に備えて、タイマーコードが複数回呼び出されます...

複数の呼び出しが一度に単一のリソースを共有しようとするため、プログラムでアサーションが発生するため、以前の呼び出しが終了していない場合はタイマーを呼び出したくありません..例外が発生し、プログラムが終了します...

タイマー呼び出しを以前の関数呼び出しと同期させる方法を教えてください..

4

2 に答える 2

1

セマフォを使用します。

前の呼び出しを開始するときにセマフォをダウンします。実行が終了したら、セマフォを上げます。

タイマーはいつでも起動でき、セマフォに到達し、現在のタスクが完了するのを待ってから、関数にアクセスしようとします。

于 2012-06-20T18:37:07.980 に答える
0
void OnTimer()
{
   static bool inTimer = false; 
   if ( inTimer ) 
       return; 
   inTimer = true;   
   .... // do things
   inTimer = false;
}
于 2012-06-20T18:36:51.950 に答える