2010年9月9日 星期四

Thread, Thread Quantum 測試

為了解決一些常見的煩人問題
只好實地下去測試 WinCE Thread 的運作機制

結果非常有趣,跟想像理解中有所不同


1. WinCE default time slice ( quantum )是為 100ms,OEM可以自己設定。(在OEMInit中設定 dwDefaultThreadQuantum) 。CE 也提供了2個函式 CeGetThreadQuantum and CeSetThreadQuantum


extern DWORD dwDefaultThreadQuantum;
 
 
void OEMInit()
{
                dwDefaultThreadQuantum = 50;
}

2.  Sleep(0)  就是把目前thread 剩下的 quantum 時間 ( <=100ms) 讓給 同Priority 的 Thread。如果沒有同Priority 的Thread ,則馬上 return. 也就是說 Sleep(0) 有兩種可能(效果)  
 I. 睡100ms (或更少) 
 II.沒有效果(馬上return)

3. Sleep(1) (或Sleep(X))  就很有趣了,就實地測試,依環境不同,有不同的結果。
如果只有2個同 Priority 的Thread, Sleep(1) 後再度醒來已經是 100ms後了。
如果有3個 Thread,則 Sleep(1) 大概睡 3~9ms。
神奇吧?

沒有留言: