Delphi Thread.Queue與Synchronize的區別(差別: Synchronize是阻塞,Queue是非阻塞)


前話:  其實大家要學會看源碼, 我接下來要說的這些東東,與其等別人講,還不如自己搞幾個代碼試一下,印象還深刻點

TThread.Queue和TThread.Synchronize的區別,
效果上:二者的作用都是讓業務代碼在主線程中執行,差別: Synchronize是阻塞,Queue是非阻塞
代碼上 兩個方法最終都是調用的 class procedure TThread.Synchronize(ASyncRec: PSynchronizeRecord; QueueEvent: Boolean = False)類方法,
差別
Synchronize則是使用了Thread對象中的FSynchronize對象變量,然后QueueEvent為False來調用TThread.Synchronize類方法, 
內部在執行FSynchronize時,創建了事件對象,通過WaitForSingleObject來阻塞執行。 
Queue調用是自己創建了一個PSynchronizeRecord, 然后QueueEvent為True來調用TThread.Synchronize類方法,內部則把PSynchronizeRecord放入SyncList列表中,然后退回,並不直接執行PSynchronizeRecord, 那問題來了,在那里執行呢?Delphi在TApplication.Idle方法中執行(最終調用了CheckSynchronize)
 
 
http://blog.csdn.net/wingleo/article/details/53860300
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM