日期:2014-05-17  浏览次数:21011 次

怎么设置线程休眠时间

public void GetData()
{
    //发送命令给串口
    Thread.Sleep(50);
    //接收数据
    //简单解析数据
    //显示界面
}
public void updateData()
{
  while(true)
   {
      GetData();
      Thread.Sleep(150);
   }


我想请教一下线程挂起(休眠)Sleep时间是怎么设置的,对数据的接收有什么影响,多线程不大懂。
多线程 线程休眠

------解决方案--------------------
线程被阻塞的毫秒数。 指定零 (0) 以指示应挂起此线程以使其他等待线程能够执行。 指定 Infinite 以无限期阻止线程。 
refer:http://msdn.microsoft.com/zh-cn/library/d00bd51t.aspx
------解决方案--------------------
可以用插队来理解一下。

一个while里面你可以理解为一个队伍一直排队做某项事情。
但是处理这个事情的只有一个人,比如打饭。

两个队伍,一个打饭员,如果一个队伍不挂起,那么就一直是处理这个队伍的事情,
如果挂起一下,就相当于休息下,让另一个队伍打打饭。

因此,每个线程如果想均匀的处理一些数据,那么sleep是必要的。
------解决方案--------------------
Thread.Sleep() 方法,它有两个重载方法(Sleep(int )、Sleep(Timespan )),只不过是表示时间量的格式不同而已,当在某线程内调用此函数时,它表示此线程将阻塞一段时间(时间是由传递给 Sleep 的毫秒数或Timespan决定的,但若参数为0则表示挂起此线程以使其它线程能够执行,指定 Infinite 以无限期阻塞线程)



Sleep()函数被定义为了static?! 这也意味着它不能和某个线程实例结合起来用,也即不存在类似于t1.Sleep(10)的调用!正是如此,Sleep()函数只能由需“Sleep”的线程自己调用,不允许其它线程调用,正如when to Sleep是个人私事不能由它人决定
------解决方案--------------------
sleep(150),当调用这句时该语句所属的线程立即交出时间片,经过150毫秒后,该线程再次进入等候队列,当进入等候队列时,该语句下面的语句并不总是立即执行,这是由cpu调度的