问题标签 [omnithreadlibrary]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - Error "Task can be only monitored with a single monitor" when setting my monitor to a task in dll
I use OmniThreadLibrary 2.09 in my dll, main application and dll are using the same SimpleShareMem
memory manager.
I created my own monitor with this code:
When I try to create a new task with this monitor, I'm getting an error "Task can be only monitored with a single monitor"
How can I monitor my task with my own monitor?
delphi - 如何监控 OmniThreadLibrary 中的管道阶段?
是否可以以某种方式监控管道任务?我试图像这样为每个任务添加监视器
但是出现异常“只能使用单个监视器监视任务”(据我了解,发生这种情况是因为已经为管道阶段安装了内部隐藏监视器)。
multithreading - 使用 OmniThreadLibrary Future 的正确方法
我目前正在尝试使用 OmniThreadLibrary。附上我的代码:
我会调用 LongWait() 并且它可以正常工作而不会阻塞 UI。我想做的是:
- 让任务在等待值的同时在后台运行
- 如果引发异常,我希望主线程捕获它
- 允许主线程确定任务是完成还是取消
是否有可能做一个非阻塞函数来完成所有这些?
先感谢您,
五。
编辑:添加问题
multithreading - TOmniMREW 是否有 CPU 密集度较低的替代方案?
我在追求一个纤细的单读多写锁,类似于 TOmniMREW,但在争用的情况下这会减少 CPU 密集度。
TOmniREW 仅使用自旋锁,因此线程将飙升至 100% 的 CPU 使用率,直到它们能够获得锁。
目前我正在使用一个关键部分,虽然它的行为效率较低(我的读者比作者多),但在争用线程的情况下会放弃它们的 CPU 时间。
在我的情况下,争用非常偶尔发生,通常是在编写器触发更复杂(冗长)的操作时,但是当它触发时,自旋锁的 CPU 使用率会飙升。
Windows SRW 实现使用类似的策略并且没有帮助(编辑:实际上在某些高争用的情况下它大约快 2-3 倍,但仍然显示问题 编辑 2: TOmniMREW 将在未来版本中使用 SRW,所以速度将是相同的)。
delphi - iOS/Android/OSX 的 OmniThread 替代品?
在 iOS/Android/OSX 下是否有 OmniThread 的替代品?
它不需要像 OmniThread 那样完整,我只需要能够拥有线程池和 TFuture<> 类。
谢谢!
更新:Delphi XE7 现在在 System.Threading 中实现 Future/Parallel/Task。
multithreading - 为多阶段进程正确的 OmniThread 抽象
我有一种复杂的多阶段过程,需要在后台(我正在使用 OmniThreadLibrary)为文档执行以下阶段,首先在主线程中创建需要执行多个阶段的对象(接口对象) .
在主线程中创建对象后,用户将其发送到处理队列(这是我将其发送到OmniThread Pipeline的位置)并执行以下阶段:
- 第 1 阶段)在此文档(本地)上执行一些“昂贵”的计算并将其保存到数据库(使用 IBObjects,我在此阶段创建自己的数据库连接)
- 第 2 阶段)将此文档发送到执行一些其他计算的 WebService,将结果保存到数据库(我确保调用 CoInitialize/CoUninitialize)<- 由于 Internet 超时、Web 服务错误、Web 服务,此阶段可能会失败维护窗口等需要处理这些。
- 第 3 阶段)生成该文档的 PDF 文件(使用 FastReports)并将其保存到磁盘。
- 第 4 阶段)可选 - 通过电子邮件发送此文档。<- 这也可能因 Internet 超时、其他错误等而失败。
从所有 OmniThreadLibrary 抽象(高和低)中,管道是这个特定问题的最佳抽象吗?还是应该只使用低级抽象对队列和阶段进行编程?
其他担忧:
- 我需要它是一个先进先出队列。
- ¿ 如何在第 2 和第 4 阶段处理异常(和重试)?
- ¿ 在主线程中创建对象是个好主意,还是应该在每个阶段实例化数据库对象并从内存中释放它?
- ¿ 在执行数据库更新时我应该使用锁吗?
- Pipeline 抽象需要知道我何时完成“添加项目”,但是在我的应用程序生命周期中,用户可以添加从一个到数百个文档,因此我永远不能调用“CompleteAdding”或者¿我应该为每个文档创建一个新管道以过程?
谢谢
delphi - 在 TOmniMessage 中释放嵌入对象的正确方法是什么?
我的任务是发送各种带有数据的消息。
例如:
在接收方我有
但我不觉得 MsgData.Clear 会正确地取消分配所有内存。
TomniValue 释放的正确处理是什么?
delphi - OmniThreadLibrary 可以在 Delphi Windows 服务中使用吗?
OmniThreadLibrary 是一个非常有趣的库。但是,我担心它在 Windows 服务中的使用。
存储库中的所有测试都是基于表单的。他们中的大多数使用(隐式或显式)基于消息的基础架构(通过 TOmniEventMonitor)。
我做了一个小型 DUnit 测试,但它从未按预期工作。它只是在我将 Application.ProcessMessages 放在代码的几个关键位置之后才开始工作。(!)
相同的测试在 Forms 应用程序中正常工作。但绝不会在像 DUnit 测试这样的连续过程代码中。
我错过了什么?如何在 Windows 服务中使用 OmniThreadLibrary?还是在一个连续的过程中没有在几个点上传播 Application.ProcessMessages?
delphi - 使用 delphi OmniThreadLibrary 读取平面文件
我正在用delphi阅读非常宽的文件
该文件以逗号分隔,大部分时间用于解析字符串。
逻辑如下
- 打开文件
- 读线
- 将行拆分为记录数组
- 将吐出的数组传递给下一个过程
- 转到第 2 步
- 关闭文件。
我想并行运行第 3 步,目前正在查看 OmniThreadLibrary。
最好的方法是什么?
我应该使用 Parallel For 吗?胡椒烯?或队列?
我正在考虑使用“Parallel For”,但问题是我不知道文件有多少行
delphi - 正确安装OmniThreadLibrary
我想在我正在使用 Delphi XE2 的项目中使用 OmniThreadLibrary,我已按照说明进行操作。
- 将 OTL 文件夹和 OTL/src 添加到 Delphi 的库路径中。
- 在 Delphi XE2 包中构建两个项目并安装。
说明非常简单,OmniEventMonitor 在调色板中。
但是,我无法运行单个示例。
例如,当我尝试运行时:
我收到错误Undeclared Identifier Parallel。
我在安装过程中做错了吗?