2009-12-22 4 views
2

System.Timers.Timer 인스턴스가 단일 스레드, 스레드 풀 또는 다른 프로그램에서 실행되는지 묻고 싶습니다. 나는 모든 모든 캐릭터의 에너지를 업데이트 할 나는 매 순간 모든 캐릭터의 건강 .NET - System.Timers.Timer 질문

  • 를 업데이트 할

    • :이 예를 들어 가장 좋은 것입니다 어떻게 생각하십니까은 단일 스레드에서 실행되는 경우

      , 이초

    • 나는 40 초마다

    내가 그들을 실행해야 별도의 스레드에 각각 별도의 이벤트를 실행하거나 그 나는 모두를 실행하는 모든 캐릭터의 스페셜을 업데이트 할 n 시간 차이를 확인해야하는 단일 스레드? http://msdn.microsoft.com/en-us/library/system.timers.aspx에서

  • +0

    BTW, 귀하의 질문에 대한 _.NET_'System.Timers.Timer' 구성 요소입니다. C# 프로그래밍 언어에는 타이머가 없습니다. –

    +0

    질문을보십시오. http://stackoverflow.com/questions/1416803 – Oliver

    답변

    0

    System.Timers.Timer 경과 이벤트는 Threadpool을 사용합니다. 따라서 간격이 적을 경우 (그리고 경과 된 이벤트> 간격이 완료하는 데 시간이 오래 걸리는 경우) 여러 스레드를 호출 할 수 있습니다. 스레드 풀은 백그라운드에서 실행되며 UI 업데이트는 Windows 응용 프로그램의 UI 스레드 외부에서 수행 될 수 없습니다. 당신은 그러나, Control.InvokeControl.BeginInvoke

    Link

    Timers

    difference between invoke and begininvoke

    1

    :

    서버 기반 타이머가 다중 스레드 환경에서 작업자 스레드와 사용하도록 설계

    . 서버 타이머는 시간에 이벤트를 발생에 이 윈도우 타이머보다 정밀도의 결과로 발생 경과 이벤트를 처리 에 스레드간에 이동할 수 있습니다.

    2

    단일 타이밍 스레드에서 모든 동작을 실행하고 시간 차이를 계산했습니다. 이렇게하면 더 많은 타이머를 인스턴스화하지 않고도 원하는만큼 많은 액션을 실행할 수 있습니다.

    동일한 시간 간격에 발생하는 작업을 동기화하는 것이 더 쉽습니다.

    0

    내가 별도의 스레드에서 그들 각각을 실행해야 사용할 별도의 이벤트를 실행하거나 이들 모두를 실행할 수 있습니다 단일 스레드는 시간 차이를 확인해야합니다.

    내 의견으로는 세 개의 타이머를 사용해야합니다. 3은 부정적인 방식으로 성능에 영향을 미치지 않아야하는 숫자입니다.

    시간 차이를 계산할 때 큰 단점은 시간 변경 (일광 절약 시간제, 인터넷과의 동기화)입니다. Environment.TickCount을 사용해야합니다.