콘솔 애플리케이션의 신뢰할 수있는 타이머
.NET 에는 세 가지 타이머 유형이 있다는 것을 알고 있습니다 ( .NET Framework 클래스 라이브러리에서 타이머 클래스 비교 참조 ). 주 스레드가 사용 중일 때 다른 유형이 드리프트 될 수 있으므로 스레드 타이머를 선택했으며 이것이 신뢰할 수 있어야합니다.
타이머의 제어에서이 타이머가 작동하는 방식은 다른 스레드에 배치되므로 바쁘지 않을 때 부모 스레드에서 완료된 작업 시작과 함께 항상 틱할 수 있습니다.
콘솔 응용 프로그램에서이 타이머의 문제는 타이머가 다른 스레드에서 작동하는 동안 주 스레드가 응용 프로그램을 닫는 데 아무 작업도하지 않는다는 것입니다.
while true
루프를 추가하려고했지만 타이머가 꺼지면 메인 스레드가 너무 바쁩니다.
Console.ReadLine()
메인 스레드를 차단하는 것과 같은 것을 사용할 수 있으므로 다른 백그라운드 스레드 (예 : 타이머 스레드)는 계속 작동합니다. AutoResetEvent 를 사용 하여 실행을 차단 한 다음 필요한 경우 해당 AutoResetEvent 객체에서 Set () 메서드를 호출하여 주 스레드를 해제 할 수도 있습니다. 또한 Timer 객체에 대한 참조가 범위를 벗어나 가비지 수집되지 않도록하십시오.
처리가 끝날 때 주 스레드를 차단하기 위해 ManualResetEvent 를 사용 Reset()
하고 타이머 처리가 완료되면이를 호출 하는 것이 좋습니다. 지속적으로 실행해야하는 경우 콘솔 앱 대신 서비스 프로세스로 이동하는 것이 좋습니다.
참고 URL : https://stackoverflow.com/questions/39/reliable-timer-in-a-console-application
'code' 카테고리의 다른 글
실행하지 않고 Eclipse에서 Java 프로그램을 컴파일하려면 어떻게해야합니까? (0) | 2020.09.06 |
---|---|
HTML5 Boilerplate 및 Twitter 부트 스트랩 (0) | 2020.09.06 |
오류가 발생하는 이유 '채널이 복구 할 수 없게 손상되어 폐기됩니다!' (0) | 2020.09.06 |
SystemError : 상위 모듈 ''이로드되지 않았습니다. 상대 가져 오기를 수행 할 수 없습니다. (0) | 2020.09.06 |
왜 C ++에서 파이썬보다 문자열을 더 느리게 분할합니까? (0) | 2020.09.06 |