Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET中检查时间的循环_Vb.net_Datetime_Loops_While Loop - Fatal编程技术网

VB.NET中检查时间的循环

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

所以我对VB有点陌生,我只是在玩一个小项目,我现在需要一个循环,不断地检查系统时钟,看看它是否等于某个时间

   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
有两种“正确”的方法可以做到这一点:

  • 构建一个普通的应用程序,它不关心时间,并在windows中将其设置为计划任务
  • 检查一次时间并计算到所需时间的时间。然后设置一个计时器,等待确切的持续时间
  • 在任何情况下,您都不应继续轮询系统时钟,以查找只运行一次的类似事件

    检查系统时钟,看它是否等于某个时间

       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
    
    有两种“正确”的方法可以做到这一点:

  • 构建一个普通的应用程序,它不关心时间,并在windows中将其设置为计划任务
  • 检查一次时间并计算到所需时间的时间。然后设置一个计时器,等待确切的持续时间

  • 在任何情况下,您都不应继续轮询系统时钟,以查找只运行一次的类似事件。

    正如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更正确!我自己也经常用这种方法。