2017-10-17 1 views
0

Ich habe diesen Code-Schnipsel in C++ und haben eine harte Zeit, es zu C#CLOCKS_PER_SEC Äquivalent in 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) 
{ 
    // 
} 

Umwandlung Ist dies, wie ich es tun sollte?

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

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

} 
+0

Ja, das ist, wie Sie es tun. – Evk

+3

Das C++ - Code-Snippet, das Sie gefunden haben, sollte weggeworfen werden. "Clock" für Timer wie diese zu verwenden ist wirklich nicht etwas, das jemand empfehlen würde. Sowohl in C als auch in C++ gibt es viele viel bessere Alternativen, besonders in C++, wo es * portable * Alternativen gibt (die "Uhr" -Funktion, während sie sich in den C- und C++ - Standards auf verschiedenen Plattformen nicht gleich verhält). –

+0

@Evk - Nein, 'now' und' myStartTime' sind beide unverändert, diese Schleife wird niemals enden. –

Antwort

2

Sie können von CancellationTokenSource als bessere Alternative machen dies zu erreichen. Zum Beispiel

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

Du hast sogar den Quellcode angeschaut :) Danke :) – Blendester