2017-10-17 63 views
0

我在C++這個代碼段,也很難將其轉換爲C#CLOCKS_PER_SEC相當於在C#

clock_t now = clock(); 
myStartTime = start; 
myTimeLimit = 5 // in seconds 

for (int depth = 2; ((double)(now - myStartTime))/(double)CLOCKS_PER_SEC < myTimeLimit; depth += 2) 
{ 
    // 
} 

這是我應該怎麼辦呢?

var now = DateTime.Now; 
myStartTime = start; 
myTimeLimit = 5; 

for (int depth = 2; (now - myStartTime).TotalSeconds < myTimeLimit; depth += 2) 
{ 

} 
+0

是的,這是你如何做到這一點。 – Evk

+3

你找到的C++代碼片段應該被扔掉。對這樣的定時器使用'clock'確實不是任何人都會推薦的。在C和C++中都有很多更好的選擇,特別是在C++中有* portable *選項('clock'函數,而在C和C++標準中,在不同平臺上表現不一樣)。 –

+0

@Evk - 不,現在和myStartTime都不變,那個循環永遠不會結束。 –

回答

2

您可以使用CancellationTokenSource作爲實現此目的的更好選擇。例如

var clt = new CancellationTokenSource(5000); 
Task.Run(() => DoSomething(clt.Token)); 

private static void DoSomething(CancellationToken cltToken) 
{ 
    for (int depth = 2; !cltToken.IsCancellationRequested; depth += 2) 
    { 
     // . . . 
    } 

    if (cltToken.IsCancellationRequested) { 
     // Time limit reached before finding best move at this depth 
    } 
} 
+0

你甚至看過源代碼:)謝謝:) – Blendester