我无法理解 IDSYNC 和 IDNOTIFY 之间的真正区别,同步/异步意味着什么
关于我写的代码行?
procedure TForm1.IdTCPServerExecute(AContext: TIdContext);
begin
....
DoSomeThing (TIDNotify) ....
DoSomethingOther(TIDsync) ......
end;
为什么我不能确定这两行代码都在 TCPServer 执行函数中执行?
是否仅存在几行代码在我的 TIDSynfunction 中未执行的风险,或者如何解释死锁?
TIdSync 和 TIdNotify 实现相同的目标 - 在主线程上下文中执行一段代码 - 但它们以不同的方式实现。
TIdSync
是同步的。这TIdSync.Synchronize()
方法会阻塞调用线程,直到主线程调用TIdSync.DoSynchronize()
方法并且它已经退出。如果出现以下情况,可能会发生死锁TIdSync.Synchronize()
当主线程关闭该服务器时,在服务器事件处理程序中调用。这是因为主线程被阻塞,等待服务器终止其线程。但线程被阻塞等待主线程处理同步请求。
TIdNotify
是异步的。这TIdNotify.Notify()
方法添加了TIdNotify.DoNotify()
方法进入后台队列并立即退出,因此调用线程不会被阻塞。主线程调用TIdNotify.DoNotify()
闲暇时的方法。这种情况下不存在僵局。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)