- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很难理解 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()
方法。这种情况下不存在僵局。
关于delphi - TIdNotify 和 TIdSync 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13534911/
我正在尝试使用 Indy 在 Delphi 2010 中编写线程应用程序。这两个对我来说都是新的,我正在努力同步 Vcl。我已经阅读了有关使用关键部分、TThread.Synchronize、TIdN
我有一个 TidTCPServer,它在 onExcecute 事件中使用数据库操作(通过使用 TidNotify)。一切都很好,而不是可能关闭应用程序。 在关闭应用程序期间,我不知道所有通知实例是否
我很难理解 IDSYNC 和 IDNOTIFY 之间的真正区别,同步/异步意味着什么关于我写的代码行? procedure TForm1.IdTCPServerExecute(AContext: TI
我有一个服务器每 0.1 秒发送一次状态。我使用此代码访问 UI 并在客户端程序上显示结果。 procedure TModules.TCPServerExecute(AContext: TIdCont
我是一名优秀的程序员,十分优秀!