C#中Thread.Sleep()的作用及用法
轉自:http://mcgtts.iteye.com/blog/798963
Thread.Sleep 函式來使執行緒掛起一段時間.
Thread.Sleep(0) 表示掛起0毫秒,你可能覺得沒作用,你要寫Thread.Sleep(1000) 就有感覺了。似乎毫無意義。
MSDN的說明:指定零 (0) 以指示應掛起此執行緒以使其他等待執行緒能夠執行。
Thread.Sleep(0) 並非是真的要執行緒掛起0毫秒,意義在於這次呼叫Thread.Sleep(0)的當前執行緒確實的被凍結了一下,讓其他執行緒有機會優先執行。Thread.Sleep(0) 是你的執行緒暫時放棄cpu,也就是釋放一些未用的時間片給其他執行緒或程式使用,就相當於一個讓位動作。
1 Thread th = new Thread(new ThreadStart(MainForm.StartSplash));
2 th.Priority = ThreadPriority.AboveNormal;
3 th.Start();
4 Thread.Sleep(0);
5
6 base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);
7 this.Initialize();
例如:
我們的run()這個函式一般是實現這樣的功能,定時的處理遊戲邏輯gameLogic()和重畫螢幕paint()。注意這裡的定時是本文的重點,如果執行遊戲邏輯和重畫螢幕的間隔時間不為固定的話。一定破壞遊戲性和遊戲畫面的真實性。
好了,我們看看一般的處理方法()
軟體開發網
publicvoidrun(){
while(true){
軟體開發網
gameLogic();//處理遊戲邏輯
repaint();//呼叫paint()重畫螢幕
Thread.sleep(500);//執行緒sleep0.5秒
}
}
看上去好象是每次的間隔就是0.5秒。不過有沒有想過如果一個複雜邏輯的遊戲gameLogic(),和paint()實際上也是需要不少時間來處理的,而且對於一個複雜邏輯的遊戲來說每次處理的時間長度都不相同,可能第一次gameLogic() paint()的時間是0.1秒下一次又有可能是0.01秒。這樣不就造成了間隔時間的不固定嗎。所以我們必須把gameLogic(),和paint()的運算時間計算進去,就象下面那樣。
publicvoidrun(){
time0=System.currentTimeMillis();
while(true){
time1=System.currentTimeMillis(); 軟體開發網
timePassed=time1-time0;
time0=time1;
gameLogic();//處理遊戲邏輯
repaint();
time1=System.currentTimeMillis();
if(time1-time0<RUN_RATE){
try{
Thread.sleep(RUN_RATE-(time1-time0));
}
catch(InterruptedExceptione){
}
}
}
}
文章來自學IT網:http://www.xueit.com/html/2009-05/21_1777_00.html
相關文章
- C#中SqlParameter的作用與用法C#SQL
- C#中?和??及?:的用法C#
- C#中continue、return、break的區別及作用C#
- 淺析Java中的雜湊值HashCode的作用及用法Java
- C#中#region,#if的作用C#
- C#中Enum的用法C#
- C#中ref、out及特殊說明引數的用法C#
- C#中substring ()的用法C#
- C#中Attributes的用法C#
- 【C#】反射的用法及效率對比C#反射
- [C#] ??雙問號的意思及用法C#
- C#中dynamic的正確用法C#
- C#中 as is 用法筆記C#筆記
- maven中profile元素的作用意義和用法Maven
- ABAP 中的表型別及作用型別
- 【轉】C#中dynamic的正確用法C#
- C#中File 類的用法 轉載C#
- C#中yield return用法分析C#
- C#中DllImport用法彙總C#Import
- c# 中的靜態類(satic class)和具體類的區別及用法C#
- 關於C#中async/await的用法C#AI
- C# 中的 Mutex(互斥體)基礎用法C#Mutex
- Oracle中password file的作用及說明Oracle
- Java中static變數作用和用法詳解Java變數
- C# ArrayList的用法C#
- C# peek()的用法C#
- c#物件導向中的get和set的用法C#物件
- C# Thread.Sleep 不精準的問題以及解決方案C#thread
- echo命令在Unix中的作用以及其常見用法?
- Git 的日常工作用法Git
- sql語句中as的用法和作用SQL
- C++引用的作用和用法C++
- SQL Server中的鎖型別及用法SQLServer型別
- HT for Web 中Painter的介紹及用法WebAI
- C# Timer用法及例項詳解C#
- Linux中chmod命令的定義及作用!Linux
- 【轉】C#中base關鍵字的幾種用法C#
- .net 6 C#中System.IO.Path類的用法C#