怎么设置线程休眠时间

BenBenBears 2013-09-25 10:23:10

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

我想请教一下线程挂起(休眠)Sleep时间是怎么设置的,对数据的接收有什么影响,多线程不大懂。
...全文
577 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
a2471388918 2014-03-23
  • 打赏
  • 举报
回复
引用 11 楼 donglizhong 的回复:
sleep(150),当调用这句时该语句所属的线程立即交出时间片,经过150毫秒后,该线程再次进入等候队列,当进入等候队列时,该语句下面的语句并不总是立即执行,这是由cpu调度的
如果有两个线程,其中一个t在休眠,main线程刚sleep完了,这就转入了就绪状态,那此时cpu是立刻执行main线程吗?如果不是,在等待的话是不是变成了浪费资源?
BenBenBears 2013-10-07
  • 打赏
  • 举报
回复
引用 11 楼 donglizhong 的回复:
sleep(150),当调用这句时该语句所属的线程立即交出时间片,经过150毫秒后,该线程再次进入等候队列,当进入等候队列时,该语句下面的语句并不总是立即执行,这是由cpu调度的
谢谢donglizhong的回答,你提到了其他人没提到的点“等候队列”。有线程这方面的书籍介绍吗?
小D2013 2013-09-27
  • 打赏
  • 举报
回复
sleep(150),当调用这句时该语句所属的线程立即交出时间片,经过150毫秒后,该线程再次进入等候队列,当进入等候队列时,该语句下面的语句并不总是立即执行,这是由cpu调度的
much0726 2013-09-27
  • 打赏
  • 举报
回复
引用 8 楼 BenBenBears 的回复:
[quote=引用 4 楼 much0726 的回复:] 可以用插队来理解一下。 一个while里面你可以理解为一个队伍一直排队做某项事情。 但是处理这个事情的只有一个人,比如打饭。 两个队伍,一个打饭员,如果一个队伍不挂起,那么就一直是处理这个队伍的事情, 如果挂起一下,就相当于休息下,让另一个队伍打打饭。 因此,每个线程如果想均匀的处理一些数据,那么sleep是必要的。
谢谢这么形象地为我解释,假如设定让打饭员休息30ms,为了换另一批队伍,而在15ms时队伍已经就绪了,这时候打饭员是否会立马开始工作,还是说要等到30ms时才开始工作?[/quote] 打饭员是不休息的,有人就工作,队伍休息,队伍休息是为了给其他队伍机会打饭。
金大捕洞 2013-09-25
  • 打赏
  • 举报
回复
using System;
using System.Threading;

class Example
{
    static void Main()
    {
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("Sleep for 2 seconds.");
            Thread.Sleep(2000);
        }

        Console.WriteLine("Main thread exits.");
    }
}

/* This example produces the following output:

Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Main thread exits.
 */

BenBenBears 2013-09-25
  • 打赏
  • 举报
回复
引用 4 楼 much0726 的回复:
可以用插队来理解一下。 一个while里面你可以理解为一个队伍一直排队做某项事情。 但是处理这个事情的只有一个人,比如打饭。 两个队伍,一个打饭员,如果一个队伍不挂起,那么就一直是处理这个队伍的事情, 如果挂起一下,就相当于休息下,让另一个队伍打打饭。 因此,每个线程如果想均匀的处理一些数据,那么sleep是必要的。
谢谢这么形象地为我解释,假如设定让打饭员休息30ms,为了换另一批队伍,而在15ms时队伍已经就绪了,这时候打饭员是否会立马开始工作,还是说要等到30ms时才开始工作?
BenBenBears 2013-09-25
  • 打赏
  • 举报
回复
引用 5 楼 u012155784 的回复:
Thread.Sleep() 方法,它有两个重载方法(Sleep(int )、Sleep(Timespan )),只不过是表示时间量的格式不同而已,当在某线程内调用此函数时,它表示此线程将阻塞一段时间(时间是由传递给 Sleep 的毫秒数或Timespan决定的,但若参数为0则表示挂起此线程以使其它线程能够执行,指定 Infinite 以无限期阻塞线程) Sleep()函数被定义为了static?! 这也意味着它不能和某个线程实例结合起来用,也即不存在类似于t1.Sleep(10)的调用!正是如此,Sleep()函数只能由需“Sleep”的线程自己调用,不允许其它线程调用,正如when to Sleep是个人私事不能由它人决定
Sleep()函数只能自己调用解释挺好的,不过我还是不大懂休眠线程的唤醒机制。是只能等休眠时间到了才能继续运行还是有什么条件可以唤醒它?
BenBenBears 2013-09-25
  • 打赏
  • 举报
回复
引用 1 楼 guwei4037 的回复:
线程被阻塞的毫秒数。 指定零 (0) 以指示应挂起此线程以使其他等待线程能够执行。 指定 Infinite 以无限期阻止线程。 refer:http://msdn.microsoft.com/zh-cn/library/d00bd51t.aspx
怎么唤醒休眠了的线程?是不是“直到被调用Thread.Interrupt的另一个线程中断或被Thread.Abort终止”?
pain_hyl 2013-09-25
  • 打赏
  • 举报
回复
Thread.Sleep() 方法,它有两个重载方法(Sleep(int )、Sleep(Timespan )),只不过是表示时间量的格式不同而已,当在某线程内调用此函数时,它表示此线程将阻塞一段时间(时间是由传递给 Sleep 的毫秒数或Timespan决定的,但若参数为0则表示挂起此线程以使其它线程能够执行,指定 Infinite 以无限期阻塞线程) Sleep()函数被定义为了static?! 这也意味着它不能和某个线程实例结合起来用,也即不存在类似于t1.Sleep(10)的调用!正是如此,Sleep()函数只能由需“Sleep”的线程自己调用,不允许其它线程调用,正如when to Sleep是个人私事不能由它人决定
much0726 2013-09-25
  • 打赏
  • 举报
回复
可以用插队来理解一下。 一个while里面你可以理解为一个队伍一直排队做某项事情。 但是处理这个事情的只有一个人,比如打饭。 两个队伍,一个打饭员,如果一个队伍不挂起,那么就一直是处理这个队伍的事情, 如果挂起一下,就相当于休息下,让另一个队伍打打饭。 因此,每个线程如果想均匀的处理一些数据,那么sleep是必要的。
Teln_小凯 2013-09-25
  • 打赏
  • 举报
回复
2楼+1
  • 打赏
  • 举报
回复
就是把这个线程“暂停”、等待其他的事情做完
全栈极简 2013-09-25
  • 打赏
  • 举报
回复
线程被阻塞的毫秒数。 指定零 (0) 以指示应挂起此线程以使其他等待线程能够执行。 指定 Infinite 以无限期阻止线程。 refer:http://msdn.microsoft.com/zh-cn/library/d00bd51t.aspx

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧