只好實地下去測試 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。
神奇吧?
沒有留言:
張貼留言