C# - 在控制台应用程序中精确使用 Thread.Sleep

标签 c# multithreading sleep thread-sleep

我是一名学习 c# 的初级程序员,我想在控制台窗口中制作一个基于文本的贪吃蛇游戏。现在,游戏运行良好,但我在使用 Thread.Sleep() 方法将代码暂停特定毫秒数时遇到问题。

问题是,每当我尝试将游戏暂停特定时间时,它似乎会暂停几毫秒。由于这是一场贪吃蛇游戏,所以这是一个相当大的问题。

我尝试做的事情:

while (true)
            {
                double startingTime = DateTime.Now.TimeOfDay.Milliseconds;
                //code
                double lag = DateTime.Now.TimeOfDay.Milliseconds - startingTime;
                Thread.Sleep((int)Math.Round(25 - lag));
                double finalTime = DateTime.Now.TimeOfDay.Milliseconds - startingTime;
                Console.Title = string.Format("Time: {0}", finalTime);
            }

我知道代码运行大约需要 6 毫秒,所以我尝试测量它并从它应该在每次移动之间等待的时间中减去它。有时它工作正常,但更多时候控制台标题说它花了 31 毫秒......

我真的很感激任何建议,如果你知道更好的方法来暂停代码运行一段精确的时间,我会很高兴知道:)

已解决:我最终使用了秒表,就像 Tamir 建议的那样,感谢所有帮助过的人 :D

最佳答案

好吧,为了获得非常精确的计时,您应该使用 multimedia定时器。 下一个最佳选择是秒表

关于C# - 在控制台应用程序中精确使用 Thread.Sleep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46837259/

相关文章:

c# - Entity Framework - 默认值未在 sql server 表中设置

c# - 在asp.net mvc3 (C#)中执行sql语句

c# - 无法将 Autofac 添加到 .Net Core 中的 ServiceCollection

c++ - 没有类静态声明的 pthread

c++ - 我可以使用 Qt 线程 ID 为每个线程创建唯一的缓存吗?

Java并发实践 "Listing 7.1. Using a volatile field to hold cancellation state."。同步可见性?

php - 如何阻止影响我整个 PHP 代码的 PHP sleep()?

c# - Entity Framework 6 和 oracle

c++ - 这里真的需要 sleep() 吗?

linux - 英特尔 gcc 中的 _mm_pause 用法