문제

VB.NET 프로그램에 시계 기능이 있는데,이 프로그램은 초를 포함하여 시간을 표시합니다. 나는 현재 현재 사용하여 끊임없이 투표하는 타이머가 있습니다. 시스템 시계와 동기화되어 두 번째 업데이트가 필요하기 때문에 시스템 클록을 자주 투표해야합니다.

초가 변경 될 때만 시간에 액세스하기에 더 직접적인 것이 있습니까?

이 코드를 작성하는보다 효율적인 방법이 있습니까?

더 많은 정보가 필요하면 알려주세요.

도움이 되었습니까?

해결책

타이머 구성 요소를 사용하지 않는 이유는 무엇입니까? 이것은 GUI를 사용하고 서비스를 구축하지 않는다고 가정합니다.

폴링을 수행하는 동기화 루틴을 호출하여 타이머를 초에 매우 가깝게 변경 한 다음 타이머를 위임 할 수 있습니다. OS 드리프트가 발생하지 않도록 분에 한 번 정도 동기 루틴을 호출 할 수 있습니다.

즉, 나는 초기 변화 이벤트를 감지 할 수있는 방법이 있다고 확신합니다. 나는 그것을하는 방법을 모른다.

업데이트:

이 링크 내가 상상했던 것과 비슷한 구현이 있습니다. 루프와 짜잔에 영구적으로 붙어 있지 않도록 수정하십시오! 당신은 당신의 동기화 루틴이 있습니다.

Update 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

이제 예비 테스트를 바탕으로 각 진드기 이벤트마다 드리프트가 있습니다. 내 컴퓨터에서는 12 밀리 초에서 20 밀리 초 사이에 달랐습니다. 드리프트를 안정적으로 수정하는 방법에 대한 아이디어가 있다면 학습에 관심이 있습니다.

다른 팁

타이머 객체를 사용하여 "간격"을 0으로 설정하고 "활성화 된"상태를 true로 설정하십시오. 이는 하드웨어 구성에 따라 대략 15 밀리 초마다 발사됩니다. 이 방법에서 mylabel.text = datetime.now.tostring () (또는 당신이하고있는 모든 일)를 설정하십시오.

그것은 완벽하게 수행됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top