2017-05-25 74 views
-1

搞乱我用秒表来了解一些操作多久点(游戏)系统中运行。的Thread.Sleep与秒表

我定义它是这样的:

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)); tocke始终为0如果删除了Thread.Sleep或甚至更低的睡眠数是否秒表需要时间来初始化或什么? 我想获得操作运行多长时间到一个长类型变量的时间,所以我可以用它来计算游戏点数(cas =(long)sekunde.Elapsed.TotalSeconds;)

+1

请考虑修改您的问题。你的意思是什么不起作用?你想实现什么? – kuskmen

+0

@kuskmen我编辑... – user3029612

+3

它必须没有任何Thread.Sleep工作。可能是在sekunde.Elapsed.TotalSeconds小于1秒时看?查找已选中的刻度或毫秒 –

回答

1

通过铸造TotalSeconds作为long你斩去小数部分,我用double小号再做你的榜样,它似乎为我工作:

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(我的设置)