【问题标题】:thread.sleep is messing with stopwatchthread.sleep 搞乱了秒表
【发布时间】:2017-05-25 13:53:28
【问题描述】:

我正在使用秒表来了解积分(游戏)系统的某些操作运行多长时间。

我是这样定义的:

Stopwatch sekunde = new Stopwatch();
long tocke;
long glavnetocke;
long cas;

tocke 和 glavnetocke 是点。

然后在“构造”中我需要这样做:

 sekunde.Start();
 Thread.Sleep(10000);
 sekunde.Stop();

如果我不做 10000 的线程睡眠,它将无法工作。

稍后在事件处理程序中我会这样使用它:

        sekunde.Start();
        viewer.Clear();
        viewer.DrawBody(body, 10.0, Brushes.Green, 10.0, Brushes.Green);
        sekunde.Stop();
        cas = (long)sekunde.Elapsed.TotalSeconds;
        tocke = tocke + ((cas / 10));
        if (tocke > 200)
        {
             glavnetocke = glavnetocke + 1;
             tocke = 0;
        }

查看器是绘制站在摄像机前的人的身体。 如果我将 thread.sleep 保留为 10000,它将起作用,否则不会。但我需要这个消失,因为它会停止整个程序。即使你只是在我按下表单中的按钮后才会发生这种情况,我需要等待 10 秒才能开始。正在考虑只添加加载屏幕,但它不起作用,因为它冻结了整个程序,所以它不显示加载 gif。

编辑:

好吧,你可以看到“tocke = tocke +((cas / 10)); 如果我删除 thread.sleep 甚至降低睡眠数,则 tocke 始终为 0。秒表需要时间来初始化吗? 我想知道操作运行到 long 类型变量的时间,这样我就可以用它来计算游戏点数。 (cas = (long)sekunde.Elapsed.TotalSeconds;)

【问题讨论】:

  • 请考虑编辑您的问题。你说它不起作用是什么意思?你想达到什么目标?
  • @kuskmen 我编辑了...
  • 它必须在没有任何 Thread.Sleep 的情况下工作。您可能会在小于 1 秒时查看 sekunde.Elapsed.TotalSeconds 吗?查找滴答声或经过的毫秒数
  • 我假设,“sekunde.Stop();”睡眠后只是为了测试睡眠?否则你的秒表不会启动......
  • @LeonidMalyshev 如果我离开 Thread.Sleep,为什么它会起作用,否则不会?不到 1 秒我不看。

标签: c# visual-studio stopwatch


【解决方案1】:

通过将TotalSeconds 转换为long,您将切掉分数部分。我用doubles 重做了你的例子,它似乎对我有用:

Stopwatch sekunde = new Stopwatch();
long glavnetocke = 0;
double cas;
double tocke = 0;

sekunde.Start();
sekunde.Stop();

cas = sekunde.Elapsed.TotalSeconds;
tocke = tocke + ((cas / 10));
if (tocke > 200)
{
    glavnetocke = glavnetocke + 1;
    tocke = 0;
}

结果

cas = 0.0000015(在我的设置上)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 2016-03-28
    相关资源
    最近更新 更多