问题标签 [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.

0 投票
4 回答
1239 浏览

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消息队列已满。

0 投票
1 回答
224 浏览

delphi - 将 TStringList 传递给 TOmniTask 过程

我在 Delphi 2007 应用程序中使用 OmniThreadLibrary,该应用程序利用全局线程池来执行一些文件操作(我需要尝试并确保它们按特定顺序完成)。

我有一个新创建的 Ini 文件的内容,该文件存储在 TStringList 中。

然后我将 TStringList 传递给 TOmniTask 的一个实例。

我无法弄清楚如何在 TOmniTask 实例中检索 TStringList

以上将返回错误:

我尝试过类型转换:

但是得到一个编译器错误:

我正在使用 OmniThreadLibrary 3.0 版 - 我无法在 D2007 中编译 3.03b

如果@gabr 是关于:伟大的工作 OmniThreadLibray,谢谢。

0 投票
0 回答
114 浏览

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

0 投票
1 回答
658 浏览

delphi - 表单关闭时终止并取消 OmniThread 任务?

这是一个秒表的示例代码,我已经使用 OmniThread 库作为单独的线程实现。

这是我的问题:我是否必须在表单关闭时终止并取消任务,还是在表单关闭时自动销毁?

0 投票
1 回答
536 浏览

delphi - 访问 OmniThread 并行任务中的参数会中止任务

在使用OmniThread库创建并行任务的程序中,当我尝试访问并行任务中的参数时,参数访问之后的代码没有执行,因此显然任务中止:

那么访问参数有什么问题'From'呢?

0 投票
1 回答
302 浏览

delphi - OmniThread:如何在 SetParameter 中传递 TRect?

在使用 OmniThread 库的程序中,如何在 SetParameter 中传递 TRect?例子:

是否有一般规则如何在 SetParameter 中使用不同类型?

0 投票
1 回答
573 浏览

multithreading - Delphi OTL 为什么多线程程序只使用一半的可用 CPU

在执行我的多线程程序期间,仅使用了 8 个可用 CPU 中的 4 个。为什么?我可以更改什么以使所有 CPU 正常工作?

(nMax 和 CalcList.Count 都是 16,Intel I7 超线程)

谢谢

0 投票
1 回答
87 浏览

delphi - 如何处理 OmniThreadLibrary 中的 IOmniParallelJoin 完成?

我正在使用IOmniParallelJoinNoWait函数并行计算几个任务,因为我希望 GUI 保持响应。但我还需要知道计算何时完成。在这种情况下是否会触发任何事件?

0 投票
1 回答
844 浏览

function - Delphi - 带记录的 OmniThreadLibrary Parallel.ForEach

我正在运行 Delphi XE2 并试图熟悉 OmniThreadLibrary,我安装了 3.03b。

我一直在查看 Parallel.ForEach 示例,但不确定后台发生了什么(这可能稍后会很明显 - 抱歉)。您可以提供任何信息来帮助我更好地了解如何实现我的目标,我们将不胜感激。

假设我有一些记录只是 2 个相关值 a 和 b 的容器。然后我想运行一个返回这些记录数组的并行循环。是否可以使用 OmniThreadLibrary 做到这一点?

例如,以 MultithreadingMadeSimple ForEachUnorderedPrimes 示例为基础,我可以执行以下操作:

我知道上面的代码示例存在一些非常基本的问题,但我希望你能理解我想要做什么。

0 投票
1 回答
645 浏览

multithreading - Delphi OTL 多线程 UI 冻结

UI 在我的 OTL 多线程程序执行期间冻结。使用 1 到 16 个线程进行测试,程序启动后 UI 立即冻结。

OmniEventMonitor 正确接收所有线程消息。当所有线程都关闭时,OmniEventMonitor 会立即处理所有接收到的消息。如何确定导致冻结的原因才能找到解决方案。Application.ProcessMessages和/或OmniTED.ProcessMessages 确实OmnitEventMonitorTaskMessage没有影响。

对于 MCVE:在主窗体上:

在 CalcUnit 上

MainForm 冻结,直到 CalcUnit 完成。