【Delphi】 Thread.Queue与Synchronize的区别

2017-11-17 10:54:35来源:oschina作者:伽罗kapple人点击

分享

前话: 其实大家要学会看源码, 我接下来要说的这些东东,与其等别人讲,还不如自己搞几个代码试一下,印象还深刻点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)


Over

相关文章

    无相关信息

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台