问题标签 [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 - OmniThreadLibrary - 代码:1816。没有足够的配额来处理此命令
更新 1:我包括了所有线程的堆栈跟踪,而不仅仅是主线程的 - 我认为这已经足够了。
更新 2:我重新打开了这个问题,因为即使在应用了我自己的问题中说明的更改后,我今天仍然收到相同的错误报告......
更新 3:似乎错误发生在线程终止时,错误发生时发送的线程消息是COmniTaskMsg_Terminated
. 现在很奇怪 - 我已经用Task.Comm.Send()
线程安全队列替换了我程序中几乎所有的调用,所以我很确定线程消息的数量Task.Comm
非常少,远远少于可能填满 Windows 的数量消息队列...
我在 Delphi XE4 中使用 OmniThreadLibrary-3.03a(刚刚升级到最新的 svn,我会看到...),并从最终用户那里得到一个错误报告,出现此问题的线程的错误消息和堆栈跟踪是包括在最后。
实际上,我通过将调用替换为Task.Comm.Send()
线程安全队列来减少此错误的可能性,后台线程使用该队列将日志发送到主线程。现在我不知道在哪里看,最可能的地方是这里(但在这个代码块内没有Task.Comm.Send()
调用......):
堆栈跟踪:
参考this answer of another question,看来OTL用作通信通道的Windows消息队列已满。
delphi - 将 TStringList 传递给 TOmniTask 过程
我在 Delphi 2007 应用程序中使用 OmniThreadLibrary,该应用程序利用全局线程池来执行一些文件操作(我需要尝试并确保它们按特定顺序完成)。
我有一个新创建的 Ini 文件的内容,该文件存储在 TStringList 中。
然后我将 TStringList 传递给 TOmniTask 的一个实例。
我无法弄清楚如何在 TOmniTask 实例中检索 TStringList
以上将返回错误:
我尝试过类型转换:
但是得到一个编译器错误:
我正在使用 OmniThreadLibrary 3.0 版 - 我无法在 D2007 中编译 3.03b
如果@gabr 是关于:伟大的工作 OmniThreadLibray,谢谢。
delphi - Unobserved TOmniTask... Task controller needs an owner?
I have written a program in Delphi 2007 using the OmniThreadLibrary. I found that the program was growing bigger and bigger in memory as it ran using the following structure to launch tasks.
After reading a few blogs and looking through docs, I found that I needed to store an instance of the task in a persistent variable. Ie...
My question is, should this be a separate persistent variable for each instance of the task?
For example: if I launched the same task from within a loop, would each previous instance would be overwritten by the new and therefore would I need an array of instances?
The examples I have seen seem to use a single variable for all instances created but this seem wrong.
Can anyone shed any light?
Thanks
delphi - 表单关闭时终止并取消 OmniThread 任务?
这是一个秒表的示例代码,我已经使用 OmniThread 库作为单独的线程实现。
这是我的问题:我是否必须在表单关闭时终止并取消任务,还是在表单关闭时自动销毁?
delphi - 访问 OmniThread 并行任务中的参数会中止任务
在使用OmniThread库创建并行任务的程序中,当我尝试访问并行任务中的参数时,参数访问之后的代码没有执行,因此显然任务中止:
那么访问参数有什么问题'From'
呢?
delphi - OmniThread:如何在 SetParameter 中传递 TRect?
在使用 OmniThread 库的程序中,如何在 SetParameter 中传递 TRect?例子:
是否有一般规则如何在 SetParameter 中使用不同类型?
multithreading - Delphi OTL 为什么多线程程序只使用一半的可用 CPU
在执行我的多线程程序期间,仅使用了 8 个可用 CPU 中的 4 个。为什么?我可以更改什么以使所有 CPU 正常工作?
(nMax 和 CalcList.Count 都是 16,Intel I7 超线程)
谢谢
delphi - 如何处理 OmniThreadLibrary 中的 IOmniParallelJoin 完成?
我正在使用IOmniParallelJoin
与NoWait
函数并行计算几个任务,因为我希望 GUI 保持响应。但我还需要知道计算何时完成。在这种情况下是否会触发任何事件?
function - Delphi - 带记录的 OmniThreadLibrary Parallel.ForEach
我正在运行 Delphi XE2 并试图熟悉 OmniThreadLibrary,我安装了 3.03b。
我一直在查看 Parallel.ForEach 示例,但不确定后台发生了什么(这可能稍后会很明显 - 抱歉)。您可以提供任何信息来帮助我更好地了解如何实现我的目标,我们将不胜感激。
假设我有一些记录只是 2 个相关值 a 和 b 的容器。然后我想运行一个返回这些记录数组的并行循环。是否可以使用 OmniThreadLibrary 做到这一点?
例如,以 MultithreadingMadeSimple ForEachUnorderedPrimes 示例为基础,我可以执行以下操作:
我知道上面的代码示例存在一些非常基本的问题,但我希望你能理解我想要做什么。
multithreading - Delphi OTL 多线程 UI 冻结
UI 在我的 OTL 多线程程序执行期间冻结。使用 1 到 16 个线程进行测试,程序启动后 UI 立即冻结。
OmniEventMonitor 正确接收所有线程消息。当所有线程都关闭时,OmniEventMonitor 会立即处理所有接收到的消息。如何确定导致冻结的原因才能找到解决方案。Application.ProcessMessages
和/或OmniTED.ProcessMessages
确实OmnitEventMonitorTaskMessage
没有影响。
对于 MCVE:在主窗体上:
在 CalcUnit 上
MainForm 冻结,直到 CalcUnit 完成。