2012-06-20 25 views
-1

據我所知,定時器是異步運行的,所以如果使用非常短的定時器計時器,它會在多次調用定時器代碼的情況下,前一個調用還沒有結束...我希望Timer只能在前一個調用返回或執行完時調用代碼?

我不想呼叫定時器,如果以前的調用還沒有完成,因爲這會導致我的程序斷言,因爲多次調用試圖共享一個資源在一個時間..這使得異常和程序終止...

請告訴我,我們應該如何同步定時器呼叫與其以前的函數調用..

+3

在C++標準中沒有「Timer」這樣的東西,所以你可能想告訴我們你正在使用的庫。 – abarnert

+1

這個問題告訴我,你可能在你的計時器功能上做了太多的工作。如果任務需要大量CPU,則使用線程並定期暫停信號量或睡眠可能是更好的選擇。 –

回答

1

U se信號量。

當您開始前面的呼叫時,關閉信號量。 當你完成執行時加載信號量。

定時器可以在任何時候觸發信號量並等待當前任務完成,然後再嘗試訪問該函數。

0
void OnTimer() 
{ 
    static bool inTimer = false; 
    if (inTimer) 
     return; 
    inTimer = true; 
    .... // do things 
    inTimer = false; 
} 
相關問題