C# 中关于程序睡眠(控制台程序)问题

2018-03-25 13:33:28 +08:00
 huiyifyj

这学期学 C#,老师布置了个问题:

场景:请输出你的青蛙旅行了多长时间。在该场景中,先输出一句话“青蛙出去旅行了”,让程序睡眠几秒(随机产生一个 5~10 秒的数值),睡眠完毕后计算间隔时间,最后输出“青蛙回家,它共旅行了?秒”。其中有两部分内容未在课堂上讲过,请自行上网百度需要什么方法、什么类或什么命名空间,并编写代码实现。

时间间隔可以通过 DateTime 来计算。 随机产生数值也单的:

Random ran = new Random();
int n = ran.Next(5, 10);

关键是让程序睡眠,这怎么整?

5082 次点击
所在节点    C#
13 条回复
huiyifyj
2018-03-25 13:38:49 +08:00
程序睡眠程序怎么一个机制,之前碰 js 看到过相关函数
GordianZ
2018-03-25 13:49:39 +08:00
huiyifyj
2018-03-25 13:52:38 +08:00
@GordianZ 控制台程序的也可以线程睡眠么?
GordianZ
2018-03-25 13:53:32 +08:00
@huiyifyj 你在 main 里面就是主线程啊,这里的线程是当前线程。
oh
2018-03-25 14:06:07 +08:00
思路反了吧,看你这个逻辑,应该是先产生一个要睡眠的时间 s,然后调用 thread.sleep(s) 让程序睡眠,睡眠结束之后直接输出 s 就行了,不用再计算两个时间差
ctsed
2018-03-25 14:23:42 +08:00
http://zh.lmgtfy.com/?q=C%23+%E7%9D%A1%E7%9C%A0
(来这问作业效率太低了)
huiyifyj
2018-03-25 16:34:09 +08:00
@oh 我也疑问啊,但老师要求用 DateTime 前后时间计算后,输出时间,我也好奇,这有点让人想不透,就像明明知道答案却一定要拐着弯求结果
justinwu
2018-03-25 16:56:32 +08:00
@huiyifyj 严格来讲,thread.sleep 是不精确的,不是你让它 sleep 多少毫秒,醒来就是过了多少毫秒的,这受到线程调度、线程优先级、系统 CPU 负载等等影响。
qsnow6
2018-03-25 17:35:28 +08:00
c#节点难得这么热闹
MinQ
2018-03-25 20:06:45 +08:00
这个应该就是单纯的 thread.sleep 吧,要精确的话其实也行,把系统时间片调低就行了,API 是 timeBeginPeriod
zingl
2018-03-25 23:47:32 +08:00
> 请自行上网百度

seriously?现在大学教面向百度编程了啊
huiyifyj
2018-03-26 00:18:39 +08:00
@zingl 呃,这只是扩展题啦,百度也没就说一定百度啊,这是叫你善用搜索而已。
thereisnoif
2018-05-07 19:22:43 +08:00
void Main()
{
Console.WriteLine("青蛙出去旅行了");
int travelDuration = 0;

var rand = new Random();
int time = rand.Next(5, 10);

Travel(time).GetAwaiter().GetResult();
travelDuration += time;

Console.WriteLine($"青蛙回家,它共旅行了{travelDuration}秒");
}

async Task Travel(int seconds)
{
await Task.Delay(seconds * 1000);
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/441200

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX