【发布时间】:2014-07-05 22:50:59
【问题描述】:
所以,我的程序基本上是创建一个 Main 的子线程,并从用户那里获取一个整数作为输入,然后将该数字通过 1000 定时转换为毫秒。
但在 for 循环中,当我输入数字 5 作为输入时,Thread.Sleep() 会休眠大约 10 秒。
代码:
static void CallToChildThread()
{
Console.WriteLine("How many seconds do you want this thread to rest?");
int time = Convert.ToInt32(Console.Read());
int mili = time * 1000;
for (int i = 0; i < time; i++)
{
Console.Write(". ");
Thread.Sleep(mili);
}
Console.WriteLine();
}
所以,当我输入 5 时,代码会将 5 乘以 1000,而 5000 将存储在 mili 中。
但是,在 for 循环中,当执行 Thread.Sleep(mili) 时,它不会整个睡眠 5 秒,而是在循环遍历一次时睡眠 10 秒。
此外,当我将替换 mili 更改为 5000 以使线程休眠 5 秒时,每次它循环时,它都能正常工作,但循环的迭代次数超出了我的预期。例如,这是我输入的输入:
How many seconds do you want this thread to rest?
5
. . . . . . . . . .
每次迭代都会正确计算 5 秒。但它迭代了 5 次以上。如果我输入 5,那么 for 循环不应该迭代 5 次并中止吗?只显示 5 个句点?
【问题讨论】:
-
@L.B 但是 5 秒和 10 秒的区别不是很大吗?
-
我不认为在这种情况下这是重复的。如果它关闭了几毫秒,那么是的。秒...不。
-
@Steve 是的,我试过了,然后我得到一个未处理的异常:System.FormatException。
-
@Steve 我输入的只是数字 5 和两个新行。我不知道为什么,但我不得不按两次回车来发送输入..
-
为什么不尝试使用调试器单步执行代码?
标签: c# multithreading thread-sleep