昨天又查了Programming Windows中譯本..
API:Sleep..過程是Suspend Main Thread..
不是Suspend Process..
但是因為Main Thread處理大部份的message..
所以只要使用Sleep..
程式效率與速度都大打折扣!!(Sleep進行時..)
系統會一直送WM_TIMER給Process..
如果Process來不及handle..
那麼WM_TIMER會被"丟棄"!!
(如有錯誤..煩請不吝指正^_^)
另外API:SetTimer確實可以指定callback..
so..VB的Timer OCX應該是採用這樣的方式~~
VB的Timer既然是ChildWindow的形式..
所以API:KillTimer應該是Main Window要Destroy前..
才被呼叫..而非API:SetTimer/KillTimer交替使用..
個人觀點:
VB的程式在call VB6 Run-Time時...
浪費太多時間..
導致1sec本來可以處理數百萬指令(以asm來說)
都花在call/stack等..轉換的動作..:(
所以Timer OCX的"一秒"!!(執行不了幾個指令啦!!)
如果event進行超過"一秒"!!
那麼WM_TIMER會被"丟棄"!!(來不及處理..)
這也難怪VB's Timer OCX沒辦法精確了..^^!!
一點點猜想..^_^