내 프로젝트 (C#, VS2010, .NET 4.0)에서 특정 for
루프가 200 밀리 초 이내에 완료되어야한다는 요구 사항이 있습니다. 그렇지 않은 경우 나머지 반복을 실행하지 않고이 기간 후에 종료해야합니다. 일반적으로 루프는 i = 0
에서 약 500,000에서 700,000으로 이동하므로 전체 루프 시간이 다릅니다.C에서 특정 시간이 지나면 루프를 종료하십시오
나는 비슷 다음과 같은 질문을 읽고 있지만 내 경우에는 도움이되지 않았다 :
- What is the best way to exit out of a loop after an elapsed time of 30ms in C++
- How to execute the loop for specific time
지금까지 내가 추적 할 Stopwatch
객체를 사용하여 시도 경과 시간이지만 그것은 나를 위해 작동하지 않습니다. for
루프 내에서 경과 시간을 비교
방법 1. : 여기에 2 개의 다른 내가 지금까지 시도한 방법은
Stopwatch sw = new Stopwatch();
sw.Start();
for (i = 0; i < nEntries; i++) // nEntries is typically more than 500,000
{
// Do some stuff
...
...
...
if (sw.Elapsed > TimeSpan.FromMilliseconds(200))
break;
}
sw.Stop();
if (sw.Elapsed > TimeSpan.FromMilliseconds(200))
가 완료 될 때까지 200 개 이상의 밀리 초 걸리기 때문에이 작동하지 않습니다. 그러므로 내 경우에는 쓸모가 없다. 나는 TimeSpan.FromMilliseconds()
이 일반적으로 오래 걸릴지 또는 어떤 이유로 든 제 경우에 있는지 확실하지 않습니다. 시간을 비교하기 위해 별도의 스레드를 생성
방법 2 :
Stopwatch sw = new Stopwatch();
sw.Start();
bool bDoExit = false;
int msLimit = 200;
System.Threading.ThreadPool.QueueUserWorkItem((x) =>
{
while (bDoExit == false)
{
if (sw.Elapsed.Milliseconds > msLimit)
{
bDoExit = true;
sw.Stop();
}
System.Threading.Thread.Sleep(10);
}
});
for (i = 0; i < nEntries; i++) // nEntries is typically more than 500,000
{
// Do some stuff
...
...
...
if (bDoExit == true)
break;
}
sw.Stop();
나는에 다른 코드가 일부 통계를 인쇄 for 루프. 방법 2의 경우, 모든 반복을 완료하기 전에 for
루프가 확실히 끊어 지지만 루프 타이밍은 여전히 280-300 밀리 초입니다.
for 루프를 200 밀리 초 이하로 엄격히 중단하라는 제안이 있으십니까? 감사합니다. .
루프를 실행하는 스레드를 죽이는 것은 어떻습니까? 그래도 이상하지 않을 수도 있습니다. –
http://stackoverflow.com/questions/5945533/how-to-execute-the-loop-for-specific-time – akhil
@Filip Ekberg, 좋은 지적! 그것을 고칠 필요가 있습니다. :) 그러나 그것은 내 문제를 해결하는 데 도움이되지 않을 수 있습니다. 그래도 좋은 연습입니다. 감사. – silverspoon