V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huiyifyj
V2EX  ›  C#

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

  •  
  •   huiyifyj · 2018-03-25 13:33:28 +08:00 · 5292 次点击
    这是一个创建于 2441 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    seriously?现在大学教面向百度编程了啊
    huiyifyj
        12
    huiyifyj  
    OP
       2018-03-26 00:18:39 +08:00 via Android
    @zingl 呃,这只是扩展题啦,百度也没就说一定百度啊,这是叫你善用搜索而已。
    thereisnoif
        13
    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);
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   942 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:41 · PVG 05:41 · LAX 13:41 · JFK 16:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.