thread.sleep 正在弄乱秒表
thread.sleep is messing with stopwatch
我正在使用秒表来了解积分(游戏)系统的某些操作 运行 需要多长时间。
我是这样定义的:
Stopwatch sekunde = new Stopwatch();
long tocke;
long glavnetocke;
long cas;
tocke 和 glavnetocke 是点。
然后在"construct"我需要这样做:
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;
}
viewer 是画 body 站在镜头前的人。
如果我将 thread.sleep 保留为 10000 它将起作用,否则它将不起作用。但我需要它消失,因为它会停止整个程序。即使只有在我按下表单中的按钮后它才会发生,我需要等待 10 秒才能开始。正在考虑只添加加载屏幕,但它不起作用,因为它冻结了整个程序,所以它不显示加载 gif。
编辑:
好吧,正如你所见,“tocke = tocke +((cas / 10));
如果我删除 thread.sleep 或什至降低睡眠次数,tocke 始终为 0。秒表需要时间来初始化吗?
我想知道对 long 类型变量的操作 运行s 的时间,这样我就可以用它来计算游戏积分。 (cas = (long)sekunde.Elapsed.TotalSeconds;)
通过将 TotalSeconds
转换为 long
,您将砍掉小数部分。我已经使用 double
s 重做了你的例子,它似乎对我有用:
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
(在我的设置中)
我正在使用秒表来了解积分(游戏)系统的某些操作 运行 需要多长时间。
我是这样定义的:
Stopwatch sekunde = new Stopwatch();
long tocke;
long glavnetocke;
long cas;
tocke 和 glavnetocke 是点。
然后在"construct"我需要这样做:
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;
}
viewer 是画 body 站在镜头前的人。 如果我将 thread.sleep 保留为 10000 它将起作用,否则它将不起作用。但我需要它消失,因为它会停止整个程序。即使只有在我按下表单中的按钮后它才会发生,我需要等待 10 秒才能开始。正在考虑只添加加载屏幕,但它不起作用,因为它冻结了整个程序,所以它不显示加载 gif。
编辑:
好吧,正如你所见,“tocke = tocke +((cas / 10)); 如果我删除 thread.sleep 或什至降低睡眠次数,tocke 始终为 0。秒表需要时间来初始化吗? 我想知道对 long 类型变量的操作 运行s 的时间,这样我就可以用它来计算游戏积分。 (cas = (long)sekunde.Elapsed.TotalSeconds;)
通过将 TotalSeconds
转换为 long
,您将砍掉小数部分。我已经使用 double
s 重做了你的例子,它似乎对我有用:
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
(在我的设置中)