2013-04-23 64 views
0

我有類似下面的代碼:高精度定時器對象超時

public void acquireReaderLock(int nmsMaxWait) 
{ 
    //'nmsMaxWait' = timeout in milliseconds 

    if(_mutex.WaitOne(nmsMaxWait)) 
    { 
     //Need time left for the second wait? 
     if(_semaphore.WaitOne(???) 
     { 
     } 
     else 
      throw new Exception("Timed out"); 
    } 
    else 
     throw new Exception("Timed out"); 
} 

我找了一個高精度定時器。在C++中,我會使用GetTickCountGetSystemTimeAsFileTime API來測量已過去的時間,但我應該在C#中使用什麼?

+2

任何你不使用[ReaderWriterLockSlim類](http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx)的原因? – dtb 2013-04-23 10:51:29

+0

@dtb:不支持命名鎖。 – c00000fd 2013-04-23 22:37:42

回答

4

您可能會想到在CLR中使用StopWatch這個最精確的時序類,我們通常在代碼執行測量中使用它。

但也有其他計時選項,如:System.Timers.Timer類,也可以使用。

作爲@Matthew Watson提到,還有另一種選擇:使用。

+1

我也會使用秒錶,但值得一提的是[Environment.TickCount](http://msdn.microsoft.com/en-us/library/system.environment.tickcount.aspx),它與GetTickCount() – 2013-04-23 10:53:18

+0

@MatthewWatson:謝謝,你的建議編輯回答。 – Tigran 2013-04-23 10:57:56

+2

+1。雖然我認爲這裏提到'System.Timers.Timer'是不合適的。定時器用於按計劃執行任務。它們對於測量流逝的時間並不是很好。 – 2013-04-23 11:26:16