Zeitverzögerung in der For-Schleife in c#
wie kann ich mit einer zeitlichen Verzögerung in einer Schleife nach einer bestimmten rotation?
Angenommen:
for(int i = 0 ; i<64;i++)
{
........
}
möchte ich 1 Sek Verzögerung nach jeder 8 rotation.
InformationsquelleAutor Abdur Rahim | 2012-03-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine Menge Möglichkeiten, das zu tun:
Methode eins: Kriminell schrecklich: Busy-wait:
DateTime timeToStartUpAgain = whatever;
while(DateTime.Now < timeToStartUpAgain) {}
Dies ist eine schreckliche Sache zu tun; das Betriebssystem wird davon ausgegangen, dass Sie tun, nützliche Arbeit und weist eine CPU ist nichts anderes als Spinnerei. Dies nie tun wenn Sie wissen, dass der spin wird nur für ein paar Mikrosekunden. Im Grunde, wenn Sie dies tun, die Sie angemietet haben jemanden, der die Uhr für Euch; das ist nicht wirtschaftlich.
Schlafen ein thread ist auch eine schreckliche Sache zu tun, aber weniger schrecklich als Heizung eine CPU. Schläft ein thread sagt dem Betriebssystem "dieser thread sollte diese Anwendung reagiert auf Ereignisse für eine Weile und nichts zu tun". Das ist besser als die Einstellung jemanden, der eine Uhr für, Sie; hast du nun angestellt jemand schlafen Sie.
Dies ermöglicht die effiziente Nutzung von Ressourcen; jetzt sind Sie Einstellung jemand, um zu Kochen und Eier, während die Eier Kochen, können Sie machen toast.
Aber es ist ein Schmerz zu schreiben Sie Ihr Programm so, dass es Pausen, bis die Arbeit in kleine Aufgaben.
Die Kehrseite, dass der Kurs C# 5 ist nur in der beta jetzt.
HINWEIS: seit Visual Studio 2012 C# 5 ist im Einsatz. Wenn Sie mit VS 2012 oder später für die asynchrone Programmierung zur Verfügung.
InformationsquelleAutor Eric Lippert
Wenn Sie möchten, eine Schlaf nach jeweils 8 Iterationen, versuchen Sie dies:
InformationsquelleAutor Adam Zalcman
Verwenden Thread.Schlafen (aus System.Threading):
Dass schlafen werde nach der ersten iteration.
InformationsquelleAutor alexn
Können Sie auch wollen, schauen Sie einfach in einem
Timer
eher als das pausieren des aktuellen Threads in einer Schleife.Wird es erlauben die Ausführung einige code-block (wiederholt oder nicht) nach einem Intervall der Zeit. Ohne mehr Kontext wäre es schwer zu sagen, für sicher, ob das beste in Ihrer situation, oder, wie würden Sie gehen über das ändern Sie Ihre Lösung dementsprechend.
InformationsquelleAutor Servy
Ist hier die Implementierung, die ich kam mit. Es ist generisch, so dass Sie leicht wieder verwenden können es für Ihren Fall. (es versteht mit dem, was @Servy vorgeschlagen)
Und dann verwenden Sie es als so:
dem Ausdrucke dieser:
InformationsquelleAutor niaher
Versuchen, diese einfachere version ohne Abhängigkeit von async oder erwarten oder TPL.
komplett sind.
Code hier
Arbeiten in einem separaten thread, so dass der Schlaf nicht blockieren Sie, könnte ein hintergrund Arbeitnehmers , Beginn , Ende-Methode der webrequest-oder Optional über einen async-task oder task.Run()
InformationsquelleAutor Sundara Prabu