여기에 대한 답변은 틀린 것은 아니지만 while(true)
루프를 수행 할 때 많은 문제를 실제로 처리하지는 않습니다. 이는 while(1==1)
입니다.
첫 번째로, 루프가 응용 프로그램이 사용되는 전체 시간 동안 실행 되더라도, 사용자가 응용 프로그램을 종료 할 때 어떤 지점에서 똥을 내고 싶을 것입니다. 왜냐하면 상수가있는 스레드가 있기 때문입니다 루프를 실행해도 사용자가 UI 창을 닫더라도 프로세스는 스레드가 종료 될 때까지 유지됩니다 (절대로 참 루프가 아닙니다). 또는 사용자가 현명 해져서 작업 관리자에서 닫힐 때까지 프로세스가 유지됩니다.
루프 밖에서 접근 가능한 속성을 참조하는 while 조건부 검사에 참 조건부를 넣으면이 문제를 해결할 수 있습니다.
예 :
베어 뼈이며, 심지어 이중 출시 또는 더블 종료 이벤트를 피하는으로하지 않습니다
private bool RequestExit = false;
private Thread MyLoopThread;
private void MyLoop()
{
while (!RequestExit)
{
//Do stuff!
Sleep(1);
}
}
public void StartLoop()
{
RequestExit = false;
MyLoopThread = new Thread(MyLoop);
MyLoopThread.Start();
}
public void StopLoop()
{
RequestExit = true;
}
.
훨씬 깨끗한 방법은 풀로 만들려는 임의의 간격을 설정하는 것입니다. 10ms 정도면 실시간 이벤트가 거의 발생하지 않아야하며 해당 간격으로 실행하는 메소드를 트리거해야합니다.
private Timer DoStuffTimer;
private void DoStuffMethod(object obj = null)
{
//Do stuff!
}
public void StartLoop()
{
DoStuffTimer = new Timer(DoStuffMethod,null,10,10);
}
public void StopLoop()
{
DoStuffTimer.Dispose();
}
무한 루프로 3 개의 스레드를 실행하고 계신 것 같습니까? 끝내지 않는 루프는 피해야하기 때문에 [Thread.Interrupts] (http://msdn.microsoft.com/en-us/library/system.threading.thread.interrupt.aspx)를 확인하십시오! –
루프가 절전 모드입니까? 논스톱을 돌면서 거기에 앉아 있으면 CPU 사용량을 설명 할 수 있습니다 (아마도 단일 코어의 100 %를 사용합니까?). 아마도 각 반복 끝에 수 밀리 초 동안 절전 모드로 들어갔다면 CPU 사용량은 더 적을 것입니다. –
@dsp 코드를 게시 할 수 있습니까? –