- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须在主线程的上下文中执行一些代码。我使用的是Lazarus + FPC。我从 DLL(如果在 Linux 上是共享库)内的线程接收到一个事件,并且我的回调函数被调用。请注意,此函数不是任何类的成员,而是附加了“cdecl”指令的独立传统函数。
我必须为收到的每条此类消息触发一个相应的属性事件处理程序。而这些事件必须在主线程的上下文中传递。我知道有两种这样的解决方案:
第一个可以,但它需要一个窗口句柄。由于这是一个库代码,因此没有可用的句柄。 AllocateHWND 不是一个选项,因为它不是跨平台的。我知道我可以创建一个虚拟表单,但这是一个非常糟糕的解决方案
第二个工作正常,但我有一个问题,例如,直到我在应用程序内移动鼠标后才会处理调用。也许我做错了什么我不知道。我就像只有在消息处理开始时才处理我的调用。但这显然可能是一个漫长的等待。
所以我想知道这里最好的解决方案是什么(可能是 QueueAsyncCall)以及如何确保我的消息(调用)将在可接受的时间范围内得到处理?
最佳答案
您无法 100% 确定,就像在任何非实时系统中一样。如果主线程挂起,它不会检查主循环中的消息或其他事件。这是正常现象。
你唯一能做的就是避免在主线程中做一些可能需要很长时间的事情。准确判断什么是必要的、什么不是必要的,这是行业的技巧。一些面向实时的人将所有文件系统访问移至线程,并严格保留 GUI 用于 UI,只是因为如果用户为此或另一个配置网络共享上的路径,则共享问题很容易导致长时间超时等待,甚至几分钟。
如果我查看 application.queueasynccall,我发现没有线程安全处理(没有锁定或锁定队列),因此其中一个已被排除。
我知道 Lazarus 在非 Windows 上在某种程度上模拟了 postmessage,并且我检查了实现并且它确实有锁,所以我认为它是多线程安全的。
关于delphi - 在主线程上下文中执行代码 (Lazarus),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3572596/
有人可以向我澄清主线 DHT 规范中的声明吗? Upon inserting the first node into its routing table and when starting up th
我正在尝试使用 USB 小工具驱动程序使嵌入式设备作为 MTP 设备工作。 我知道 Android 从大容量存储设备切换到 MTP 设备已经有一段时间了,并且找到了 source code for M
我是一名优秀的程序员,十分优秀!