2017-05-25 66 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(我的設置)