VB.NET 프로그램에 초를 포함하여 시간을 표시하는 시계 기능이 있습니다. 현재 현재 타이머를 사용하여 폴링하고 있습니다. 시스템 시계와 동기화 된 두 번째 업데이트가 필요하기 때문에 시스템 시계를 자주 폴링해야합니다.더 효율적인 시계 기능 작성
초가 변경된 경우에만 시간에 직접 액세스 할 수 있습니까?
이 코드를 작성하는 효율적인 방법이 있습니까?
자세한 정보가 필요하면 알려주십시오.
VB.NET 프로그램에 초를 포함하여 시간을 표시하는 시계 기능이 있습니다. 현재 현재 타이머를 사용하여 폴링하고 있습니다. 시스템 시계와 동기화 된 두 번째 업데이트가 필요하기 때문에 시스템 시계를 자주 폴링해야합니다.더 효율적인 시계 기능 작성
초가 변경된 경우에만 시간에 직접 액세스 할 수 있습니까?
이 코드를 작성하는 효율적인 방법이 있습니까?
자세한 정보가 필요하면 알려주십시오.
왜 타이머 구성 요소를 사용하지 않습니까? 여기서는 GUI를 사용 중이며 서비스를 작성하지 않는다고 가정합니다.
폴링을 수행하는 동기화 루틴을 호출하여 타이머를 변경하는 초에 매우 근접한 다음 타이머에 위임 할 수 있습니다. 1 분에 1 번 정도 동기화 루틴을 호출하여 OS 드리프트가 발생하지 않도록 할 수 있습니다.
그 말은, 나는 초 변화 이벤트를 감지하는 방법이있을 것이라고 확신하지만, 어떻게해야할지 모릅니다.
업데이트 :
This link 내가 상상 한 것과 유사한 구현을 가지고있다. 루프에 영구히 붙어 있지 않도록 잘 수정하십시오! 당신은 동기화 루틴을 가지고 있습니다.
업데이트 2 : Shog9의 피드백을 바탕으로
, 나는이 폴링보다 더 좋은 방법이 될 수있다 생각은 :
이제Public Class Form1
Private WithEvents clockTimer As New Timer
Private currentTime As DateTime = DateTime.MinValue
Private Sub ClockTick(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles clockTimer.Tick
UpdateTimer()
DisplayTimer()
End Sub
Private Sub UpdateTimer()
currentTime = DateTime.Now
clockTimer.Stop()
clockTimer.Interval = 1000 - currentTime.Millisecond
clockTimer.Start()
End Sub
Private Sub DisplayTimer()
lblTime.Text = currentTime.ToString("T")
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
UpdateTimer()
DisplayTimer()
End Sub
End Class
, 내 예비 시험을 기반으로, 드리프트의 일종에있다 각 Tick 이벤트. 내 컴퓨터에서는 12 ~ 20 밀리 초로 다양했습니다. 누구든지 안정적으로 드리프트를 수정하는 방법에 대한 아이디어가 있다면 학습에 관심이있을 것입니다.
Timer 객체를 사용하여 "interval"을 0으로 설정하고 "enabled"를 true로 설정합니다. 하드웨어 구성에 따라 대략 15 밀리 초마다 실행됩니다. 이 메서드에서 MyLabel.Text = DateTime.Now.ToString() (또는 무엇을하고 있는지)을 설정합니다.
이것은 완벽하게 수행됩니다.
Performant ... 컴퓨터에서 오버 헤드를 감지하지 못했습니까? 또는 실행하는 세미 - 사소한 코드에서 여러 번, 필요한 것보다 몇 번만 더 많은 하드웨어의 응용 프로그램에 큰 문제가 아닌가요? – Shog9
루프에 앉아 시스템 시계를 폴링하는 것이 좋습니다? – Shog9
일시적으로 만. 변곡점을 결정한 후에는 이벤트가있는 시스템 타이머를 호출합니다. –
음 ... 다음 타이머 간격을 밀리 초 단위로 조정하십시오. – Shog9