delphi - 如何使用 Delphi 并行检查拼写?

标签 delphi parallel-processing spell-checking

我有一种用 Delphi 编写的拼写检查器。它逐句分析文本。 它在解析每个句子后根据一些规则对错误的项目进行着色。用户能够中断此过程,这一点很重要。 我如何使用一些第 3 方 Delphi 库并行化这个过程? 在当前状态下,我在检查后已经对句子进行了着色。因此用户可以看到进度。

最佳答案

算法如下:

  • 创建多个工作线程。
  • 在每个工作线程中创建一个拼写检查器。
  • 抓取文本并将其拆分为工作单元(单词或句子)。每个工作单位必须附有原文地点。
  • 将工作单位发送给 worker 。好的方法是将数据发送到工作人员从中获取工作单元的公共(public)队列中。队列必须支持多个读取器,或者必须使用锁定来访问它。
  • 每个 worker 占用一个工作单元,运行拼写检查并将结果(连同原始文本中的位置)返回给所有者。
    • 返回结果的最简单方法是将消息发送到主线程。
    • 或者,您可以将结果写入结果队列(该队列必须使用锁定或支持多个写入器),然后应用程序可以轮询这些结果(通过计时器或 OnIdle 处理程序)。

多个拼写检查器如何访问字典是另一个问题。您可以在每个工作人员中加载字典的副本,也可以使用锁来保护对字典的访问(但这会减慢速度)。如果幸运的话,字典的读取是线程安全的,并且您可以在不锁定的情况下进行同步查询。

针对该问题的适当 OmniThreadLibrary 抽象可以是 ParallelTaskBackgroundWorker .

关于delphi - 如何使用 Delphi 并行检查拼写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11045657/

相关文章:

objective-c - 自定义 NSTextView insertText :replacementRange breaks Spell Checking

delphi - 无需刷新 FMX 控件

mysql - MySQL中使用timediff函数计算12小时格式的时差

java - getDeclaredMethods/getDeclaredFields/getConstructors 的替代方法

wpf - 有没有办法在WPF中使用澳大利亚英语词典

python - Python 拼写检查器

web-services - 使用 Web 服务时出现此错误的原因是什么?

java - 具有并行处理功能的 Apache Camel 多播不会将异常传播到死信处理程序

big-o - 在分析 PSRS 为什么 O(p^2 log p^2) = O(p^2 log p)?

c# - 在 for 循环中创建新线程并传递参数