我很难理解IDSYNC和IDNOTIFY之间的真正区别,对于我编写的代码行,什么意味着同步/异步?
procedure TForm1.IdTCPServerExecute(AContext: TIdContext);
begin
....
DoSomeThing (TIDNotify) ....
DoSomethingOther(TIDsync) ......
end;
Run Code Online (Sandbox Code Playgroud)
为什么我不确定这两行代码是否在TCPServer Execute函数中执行?是否存在在我的TIDSynfunction中没有执行几行代码或者如何解释Deadloack的风险?
TIdSync和TIdNotify实现了相同的目标 - 在主线程的上下文中执行一段代码 - 但它们以不同的方式执行.
TIdSync是同步的.该TIdSync.Synchronize()方法阻塞调用线程,直到主线程调用该TIdSync.DoSynchronize()方法并且它已退出为止.如果TIdSync.Synchronize()在主线程关闭该服务器时在服务器事件处理程序中调用死锁,则可能发生死锁.这是因为主线程被阻塞,等待服务器终止其线程.但是线程被阻塞,等待主线程处理同步请求.
TIdNotify是异步的.该TIdNotify.Notify()方法将该方法添加TIdNotify.DoNotify()到后台队列并立即退出,因此不会阻止调用线程.主线程TIdNotify.DoNotify()在闲暇时调用该方法.在这种情况下没有僵局.
| 归档时间: |
|
| 查看次数: |
2176 次 |
| 最近记录: |