2014-11-20 3 views
-3

좋은 제목으로이 게시물을 만드는 방법을 알지 못해서 미리 사과드립니다.System.Timers.Timer?를 사용하는 여러 번 호출하는 방법?

다음과 같은 방법으로 System.Timers.Timer을 사용하여 일정 시간 동안 일시 중지합니다. 본질적으로 클래스를 한 번만 인스턴스화하고 다른 Double 값을 사용하여 TestDelay() 메서드를 여러 번 호출합니다.

ToErase를 한 번 인스턴스화했지만 TestDelay()을 두 번 호출하면 지연이 발생하지 않는다는 문제점이 있습니다. 반대로 ToErase 클래스를 두 번 인스턴스화하고 각 인스턴스 당 TestDelay()을 한 번 호출하면 지연이 발생합니다. 나는 그것이 같은 사유지 내에서 공유되는 사유 재산 딜레이에 의한 것이라고 생각한다.

질문 : ToErase를 한 번만 인스턴스화하고 TestDelay()를 여러 번 호출 할 수 있도록이 클래스를 수정해야하는 이유는 무엇입니까?

나는 Thread.Sleep()으로 생각했지만 현재 실행중인 TestDelay()의 다른 인스턴스를 포함하여 전체 콘솔 응용 프로그램을 잠자 게합니다. 클래스 잘못된 것들을 많이 있습니다

class ToErase 
{ 
    private System.Timers.Timer Delay; 
    private ManualResetEventSlim ev = new ManualResetEventSlim(false); 
    public void TestDelay(Double ms) 
    { 

     Console.Write("."); 

     ev = new ManualResetEventSlim(false); 

     //TimeSpan span = DateTimeRun.AddMinutes(Offset).Subtract(now); 
     Delay = new System.Timers.Timer(ms); 
     Delay.Enabled = true; 

     Delay = new System.Timers.Timer(ms); 
     Delay.Elapsed += Delay_Elapsed; 
     Delay.Enabled = true; 
     while (Delay.Enabled) 
     { 
      string s = ""; 
      ////Wait until time passes 
     } 
     Console.WriteLine("Timer completed for QTR"); 
    } 
    private void Delay_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
    { 
     Delay.Enabled = false; 
     ev.Set(); 
    } 

} 
+0

이 코드는'Thread.Sleep()'과 어떻게 동일한 일을합니까? 'TestDelay()'메소드는 타이머가 만료 될 때까지 리턴하지 않습니다. 이것은 Thread.Sleep()에있는 것과 같은 행동입니다. _good_ 코드 예제의 특성에 대한 정보는 http://stackoverflow.com/help/mcve를 참조하십시오. –

+1

게시 한 코드가 의미가 없으므로 아무도 실제로 여기에서 해결하려고하는 문제점을 알 수 없습니다. 작업중인 코드에 대해 아는 척하지 말고 질문을 읽는 사람들의 입장을 생각해보십시오. 자신의 질문에 대한 정직한 평가를하면 왜 투표를 잘못했는지 이해하게 될 것입니다. –

+1

"그냥 요점을 확인하는"당신을 다운 투표 한 것은 거의 없습니다. SO에 대한 하급 투표는 실제 의미와 실용적인 이유가 있습니다. 사람들의 의견을 표현할 수있는 메커니즘이 아닙니다 (단 하나의 부작용 일 수 있음). 당신은 다른 사람들의 동기에 대한 가정을하지 않도록주의해야합니다. 어쩌면 당신은 더 생산적으로 시간을 보내야합니다. 귀하의 질문에 대한 지역 사회의 반응에 대해 불평하는 것보다 귀하의 질문 개선에 집중하는 것이 더 낫습니다. –

답변

0

:

여기 내 코드입니다. 당신이 OO 프로그래밍에 익숙하지 않다고 가정합니다.

Thread.Sleep이 원하는 것입니다. 자신 만의 함수를 작성할 이유가 없습니다.

당신은 Thread.Sleep()이 "전체 콘솔 응용 프로그램을 잠자기"라고 말합니다. 클래스를 작동 시키면 "전체 콘솔 응용 프로그램"도 지연되지만 프로세서 전체를 회전시키기 때문에 더 나빠질 것입니다.

질문에 문구가 있으면 여러 스레드로 작업하고있는 것으로 의심됩니다. Thread.Sleep이 주 스레드를 일시 중지하지만 TestDelay가 실행되지 않는다는 것을 알게되면 다른 기능을 호출하는 방식이 그 이유 일 수 있습니다.

마지막으로 프로그래밍을 처음 사용하는 경우 지금은 멀티 스레드 코드를 사용하지 않는 것이 좋습니다.

관련 문제