2010-10-07 76 views
0

我需要測量收到最後一個數據包和新數據包到達之間的時間差。我已經使用在C#中Timer類這樣的嘗試:設置流逝的計時器事件

while (listening) 
      { 
       if (hB != null) 
       { 
        interval = hB.GetHBInterval(); 
        aTimer = new System.Timers.Timer(interval+5); 
        Console.WriteLine("Interval is: {0}", interval);  
        byte[] bytes = listener.Receive(ref groupEP); 
        DecodeUDPMessage(Encoding.UTF8.GetString(bytes, 0, bytes.Length)); 
       } 
       else 
       { 
        byte[] bytes = listener.Receive(ref groupEP); 
        DecodeUDPMessage(Encoding.UTF8.GetString(bytes, 0, bytes.Length)); 
       } 
      } 

我本來就這樣,如果間隔的時間長度後,計時器經過事件將被調用。但意識到計時器將等待間隔的長度,然後調用事件。我需要弄清楚的是,我可以計算出一個數據包的最後時間和新數據到達的時間差異。如果我可以,那麼我需要根據區間值對它進行評估,如果它更大,請調用另一種方法來完成一些工作。

我的大腦已經死亡,試圖找出這一點,所以任何幫助將不勝感激。

回答

1

您應該存儲DateTime.Now,然後與儲值進行比較。

例如:

var lastTime = DateTime.Now; 
//Do things... 
if ((DateTime.Now - lastTime).TotalSeconds > 5) 
    //Do other things 
+0

問題是,是應該在以後運行的代碼部分System.Diagnostics.Stopwatch類定時器已被設置將不會執行,直到收到另一個數據包。那麼,我該如何繼續檢查以查看已經過了多久?我應該把它放在另一個線程上,那麼如果發現一個數據包,請重新啓動計時過程並重復此操作? – stuartmclark 2010-10-07 15:11:42

+0

你想要什麼時候運行該功能? – SLaks 2010-10-07 15:18:18

+0

該函數只應在已經通過的時間大於間隔的時間時運行。這意味着間隔時間已經結束,您現在應該會收到另一個數據包。如果在時間間隔內沒有收到此數據包,請調用該函數請求數據包。 – stuartmclark 2010-10-07 15:23:13

1

你可能想看看,而不是使用計時器

+0

這裏不需要秒錶。 (這主要是爲了在短時間內測量性能) – SLaks 2010-10-07 14:48:46