2017-05-27 29 views
1

我有一個簡短的問題。它很簡單,但我很困惑。我正在使用終端在C中創建一個定時器。我正在使用SIGALRM發送減去SUBTRACT_CONST值的信號。我假設有25 TICKS_PER_SECOND或1/25這是我的減法常數0.0400。我已經安裝了信號處理程序和計時器,以關閉itimer結構中的每個40000us。然而,在我的一個功能中,當時間變爲零時,我不能「捕捉」。當這個TICK_PER_SECOND值是32或16時,它按預期工作。我的比較似乎沒有捕捉到這些不同的時間點。我的時間變量是持有這個正在被減去的值是雙倍的。檢查雙數是零的時間

if(TIME == 0) //my very simple comparison 
+0

我已經試過了。我的計時器倒計時到負時間。一旦它變得小於0,這個條件總會被滿足。 –

+1

只需使用一個'int',從步驟1中的25開始倒數。 – harold

+0

您只需要使用適當的條件,就不能使用精確的比較。例如,'if(TIME <0.00001)...'或類似的東西。或者做一下@harold所說的並將你的問題解決爲整數。 – lurker

回答

1

如果你用一個浮點數定時器那麼也許唯一的辦法是使用條件,如:

if(abs(TIME) < number)... 

其中數字是像e-9很小的值比意味着幾乎爲零。