2010-02-28 31 views
2

我正在使用System.Timers.Timer類。當我發送消息並在收到消息時禁用。我如何計算已經過了多少時間。我已將間隔設置爲1秒如何查找發送和接收數據之間的經過時間?

基本上我在1000秒後重新發送數據,如果我沒有收到ACK。我最多重發5次,直到我得到Ack。如果我在150ms之前收到一些東西,我會停止回放。

下面的代碼:對接收的數據

timer1.interval = 1000; 
port.Write(data) 
timer1.enabled = true; 

事件處理程序。

timer1.enabled=false; 
+0

會http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx(System.Threading.Timer)是合適? – t0mm13b

+0

@tommieb是的。我認爲System.Threading.Timer是合適的,因爲我確實需要記錄經過的時間以及執行次數等。根據所提供的信息提供其他建議... –

回答

1

這不是System.Timers.Timer類的用處。請改爲查看System.Diagnostics.Stopwatch。

0

Timer類不用於測量已用時間 - 它用於定期生成事件。

你可能想要的是Stopwatch類(訪問鏈接):

var sw = new Stopwatch(); 
sw.Start(); 
port.Write(data); 
sw.Stop(); 
var elapased = sw.Elapsed; // elapsed is a TimeSpan 

Elapsed屬性是TimeSpan具有用於評估不同的方式傳遞的時間量的方法和屬性。

+0

經過的時間1秒我需要重新傳輸數據。我最多可以做5次。這與2個設備之間的ACK/Nak和數據交換有關。所以有一件事情需要被解僱。 –

+1

我不會爲這種通信交換使用定時器。定時器對於時間不敏感的處理更合適。這個事件並不值得在你期望的時間間隔內被解僱 - 如果你在事件處理程序中,你可能會「失去」一些事件。對於像網絡或設備間I/O這樣的事情,您可能想要使用帶有一些等待邏輯(或sempahores)的單線程循環或更像完成端口(更復雜)的東西。 – LBushkin

+0

您可能需要考慮改述問題並添加更多關於您正在做的事情的信息 - 如果您想要答案。我不是唯一一個認爲你正在測量時間的迴應者。 – LBushkin

6

改用Stopwatch。

Stopwatch clock = Stopwatch.StartNew(); 
port.Write(data); 

並在處理程序

clock.Stop(); 
Console.WriteLine(clock.Elapsed); 
相關問題