VB.NET中检查时间的循环
所以我对VB有点陌生,我只是在玩一个小项目,我现在需要一个循环,不断地检查系统时钟,看看它是否等于某个时间VB.NET中检查时间的循环,vb.net,datetime,loops,while-loop,Vb.net,Datetime,Loops,While Loop,所以我对VB有点陌生,我只是在玩一个小项目,我现在需要一个循环,不断地检查系统时钟,看看它是否等于某个时间 While Not myTime.Hour = 24 If TimeOfDay = newTime Then nfi.ShowBalloonTip(15) intRandNumb = RandomNumber(1, 15) dblAddMinutes = intTime + intRandNum
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
我现在就有这个,但很明显,它正在使一切停止,并在这个过程中使用了我50%的cpu,我只是想知道我可以替换什么或改变什么,以使这个循环运行得更好,并按照我的需要执行它。您可以添加
Threading.Thread.Sleep(0),
这将导致上下文切换,并大大减少CPU使用
也可以考虑使用一个定时器对象,每10或100毫秒调用一次,这也会更好的使用,然后有一个循环
你可以添加< /p>Threading.Thread.Sleep(0),
这将导致上下文切换,并大大减少CPU使用
也可以考虑使用一个定时器对象,每10或100毫秒调用一次,这也会更好的使用,然后有一个循环
你可以使用< /p>Threading.Thread.Sleep(0)
这将导致工作线程产生剩余的当前时间片,这将大大减少cpu的使用。然而,你应该考虑你是否真的忙着等待时间,或者你是否可以设定一个计时器来计算当前时间和预期时间之间的差异,例如:。
var t = new System.Timers.Timer((DateTime.Now - DateTime.Now).TotalMilliseconds);
t.Elapsed = DoSomething;
t.Start();
你可以用
Threading.Thread.Sleep(0)
这将导致工作线程产生剩余的当前时间片,这将大大减少cpu的使用。然而,你应该考虑你是否真的忙着等待时间,或者你是否可以设定一个计时器来计算当前时间和预期时间之间的差异,例如:。
var t = new System.Timers.Timer((DateTime.Now - DateTime.Now).TotalMilliseconds);
t.Elapsed = DoSomething;
t.Start();
检查系统时钟,看它是否等于某个时间
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
有两种“正确”的方法可以做到这一点:
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
有两种“正确”的方法可以做到这一点:
在任何情况下,您都不应继续轮询系统时钟,以查找只运行一次的类似事件。正如Joel所指出的,您应该尝试使用计时器。我不确定你的应用程序是窗体还是控制台或其他,因此我将尝试使用
System.Timers.Timer
此处的代码(间隔设置为10ms,更改为您需要的值):
正如乔尔指出的,你应该试着用定时器来代替。我不确定你的应用程序是窗体还是控制台或其他,因此我将尝试使用
System.Timers.Timer
此处的代码(间隔设置为10ms,更改为您需要的值):
我以前从未使用过计时器对象在这种情况下如何实现它?请参阅@Grizzly了解如何实现计时器解决方案我以前从未使用过计时器对象在这种情况下如何实现它?请参阅@Grizzly了解如何实现计时器解决方案如果我正确读取了以毫秒为单位创建计时器的值这两个时间之间的差异,并在计时器已过时做些什么?很抱歉,我以前从未使用过计时器。是的,这正是预期的行为(当然,这段代码是c#,所以在vb.net中使用它时有一些小的语法差异,但除此之外…)当然,哇,非常感谢您的帮助。你在很短的时间内教了我一些好东西。所以如果我读对了,就会产生一个计时器,以毫秒为单位,两次之间的差值,并且在计时器运行后做些什么?很抱歉,我以前从未使用过计时器。是的,这正是预期的行为(当然,这段代码是c#,所以在vb.net中使用它时有一些小的语法差异,但除此之外…)当然,哇,非常感谢您的帮助。你在短时间内教了我一些好东西。哎呀,我没意识到灰熊做了一个样本。我的是VB。我是C#er,所以我花了一些时间才把代码弄出来。谢谢你的时间,这真的很有帮助,现在一切都很顺利。哎呀,我不知道灰熊做了一个样本。我的是VB。我是C#er,所以我花了一段时间才把代码弄出来。谢谢你的时间,这真的很有帮助,现在一切都运行得很顺利。根据问题中的代码示例,我认为选项2更正确!我自己也经常使用这种方法。根据问题中的代码示例,我认为选项2更正确!我自己也经常用这种方法。