據我所知,定時器是異步運行的,所以如果使用非常短的定時器計時器,它會在多次調用定時器代碼的情況下,前一個調用還沒有結束...我希望Timer只能在前一個調用返回或執行完時調用代碼?
我不想呼叫定時器,如果以前的調用還沒有完成,因爲這會導致我的程序斷言,因爲多次調用試圖共享一個資源在一個時間..這使得異常和程序終止...
請告訴我,我們應該如何同步定時器呼叫與其以前的函數調用..
據我所知,定時器是異步運行的,所以如果使用非常短的定時器計時器,它會在多次調用定時器代碼的情況下,前一個調用還沒有結束...我希望Timer只能在前一個調用返回或執行完時調用代碼?
我不想呼叫定時器,如果以前的調用還沒有完成,因爲這會導致我的程序斷言,因爲多次調用試圖共享一個資源在一個時間..這使得異常和程序終止...
請告訴我,我們應該如何同步定時器呼叫與其以前的函數調用..
U se信號量。
當您開始前面的呼叫時,關閉信號量。 當你完成執行時加載信號量。
定時器可以在任何時候觸發信號量並等待當前任務完成,然後再嘗試訪問該函數。
void OnTimer()
{
static bool inTimer = false;
if (inTimer)
return;
inTimer = true;
.... // do things
inTimer = false;
}
在C++標準中沒有「Timer」這樣的東西,所以你可能想告訴我們你正在使用的庫。 – abarnert
這個問題告訴我,你可能在你的計時器功能上做了太多的工作。如果任務需要大量CPU,則使用線程並定期暫停信號量或睡眠可能是更好的選擇。 –