将一个线程置于休眠状态以获取十进制值

时间:2013-05-19 17:42:16

标签: c# .net multithreading visual-studio-2010 decimal

这个问题与System.Threading.Thread.Sleep(int)有关。我知道没有十进制值的方法,但我真的需要使用小数。这是情况

我有一个20.37毫秒转动1度的设备。因此,我需要将代码置于睡眠状态,以获得20.37(2度= 20.37 * 2等)的适当乘法。由于线程类没有小数睡眠方法,我该怎么办呢?请帮忙!

5 个答案:

答案 0 :(得分:3)

这不起作用。 Sleep会授予您线程闲置x时间的权限,但不会让它保持空闲状态以获得更多时间。睡眠周期结束意味着线程可供调度程序运行,但调度程序可能会选择在此时运行其他线程/进程。

获取最初的瞬间,找到最后的瞬间,并按时间计算当前转弯。另外,不要忘记检查时间函数的精确程度。

实时编程本身有一些特殊性,建议您在尝试使用某些内容之前在主题中寻求更多信息。它可以非常广泛(多处理操作系统与单处理,优先级等)。

答案 1 :(得分:-1)

是的,正如评论中指出的那样,Thread.Sleep并非100%准确。但是,您可以(理论上)通过将毫秒转换为刻度,然后创建一个新的TimeSpan并使用它调用方法来等待20.27毫秒,如下所示:

Thread.Sleep(new TimeSpan(202700)) 
//202700 is 20.27 * TimeSpan.TicksPerMillisecond (which is 10,000)

同样,这可能不会100%准确(因为Thread.Sleep只保证至少足够的时间)。但如果这足够准确,那就没事了。

答案 2 :(得分:-1)

我遇到了同样的问题。但作为一种解决方法,我替换浮动vslie但在传递中转换为int值。代码本身对我来说很有用,而且线程睡了很长时间。正如我所说,它是一个解决方案,我只是说,而不是它是准确的

答案 3 :(得分:-1)

您可以简单地将整数相除-我才知道。

我只需要不到一毫秒的时间就可以使线程进入睡眠状态,因此我将时间除以整数即可,您可以定义一个常量,也可以只键入:

System.Threading.Thread.Sleep(time / 100);

或者您想要什么号码。 如前所述,您也可以像这样:

int thisIsTheNumberYouDivideTheTimeBy = 100;
Thread.Sleep(time / thisIsTheNumberYouDivideTheTimeBy);

实际上很简单。希望有帮助。

顺便说一句,而不是

System.Threading.Thread.Sleep(x);

您只需输入

Thread.Sleep(x);

除非你没有写

using System.Threading;

开头。

答案 4 :(得分:-2)

您可以使用一些数学方法来解决。 假设您不想非常精确, 但仍需要总体上保持精确的睡眠状态。

South.east 这应该给您〜20.5睡眠时间。立即发挥您的想象力。

TotalSleeps / trys =“应该是想要的值”,但是对于单个睡眠间隔,这将不是真的。

请勿在创建新实例之前使用new Random()。