Boucle pour vérifier le temps en VB.NET
-
12-09-2019 - |
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.
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 »:
- 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.
- 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.