Question

Je suis une sorte de nouveau à VB et je suis tout simplement jouer avec un petit projet, j'ai besoin actuellement une boucle qui est contrôlée continuellement horloge du système pour voir si elle est égale à un certain temps.

   While Not myTime.Hour = 24

        If TimeOfDay = newTime Then
            nfi.ShowBalloonTip(15)
            intRandNumb = RandomNumber(1, 15)
            dblAddMinutes = intTime + intRandNumb
            newTime = TimeOfDay.AddMinutes(dblAddMinutes)

        End If
    End While

J'ai ce moment, mais il est évidemment broyage tout à l'arrêt et en utilisant 50% de mon cpu dans le processus, je voudrais juste savoir ce que je peux remplacer ou changer pour faire de cette course en boucle mieux et réaliser comment J'ai besoin pour.

Était-ce utile?

La solution

Joel a fait remarquer, vous devriez essayer d'utiliser à la place une minuterie. Je ne sais pas si votre application est une forme ou une console ou un autre, donc je vais essayer d'être générique et utiliser System.Timers.Timer.

Le code ici (intervalle est fixé à 10ms, changer à une valeur de votre besoin):

Private timer1 As System.Timers.Timer    
Const interval As Integer = 10 


Sub initTimer()
    timer1 = New System.Timers.Timer(10)
    AddHandler timer1.Elapsed, AddressOf Me.timer_Elapsed
    timer1.Start()
End Sub

Sub timer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs)
    'do your stuff here
    'Console.WriteLine(e.SignalTime.ToString())
End Sub

Autres conseils

vous pouvez ajouter

Threading.Thread.Sleep(0),

cela entraînera un changement de contexte et de réduire considérablement l'utilisation du processeur

Pensez également à utiliser un objet minuterie pour appeler tous les 10 ou 100 ms, ce sera aussi mieux dans l'utilisation puis d'avoir une boucle

Vous pouvez utiliser

Threading.Thread.Sleep(0)

Cela entraînera le fil de travail pour obtenir le reste est en cours timeslice qui réduira l'utilisation cpu un peu. Cependant, vous devriez considérer si vous avez vraiment nead occupé en attendant le moment ou si vous pouvez vous en sortir avec une minuterie pour établir un compte à rebours la différence entre l'heure actuelle et l'heure prévue, par exemple:.

            var t = new System.Timers.Timer((DateTime.Now - DateTime.Now).TotalMilliseconds);
        t.Elapsed = DoSomething;
        t.Start();
  

vérification de l'horloge du système pour voir si elle est égale à un certain temps.

Il y a deux façons de le faire « corriger »:

  1. Construire une application normale qui ne se soucie pas quelle heure il est, et le mettre dans les fenêtres comme une tâche de planification.
  2. Vérifier le temps une fois et calculer combien de temps jusqu'à ce que le temps désiré. Ensuite, mettre en place une minuterie pour attendre que la durée exacte.

En aucun cas, vous devez garder l'horloge système scrutin pour quelque chose comme ce qui va juste courir une fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top