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

ily*_*lya 5 delphi parallel-processing spell-checking

我有一种用Delphi编写的拼写检查器.它逐句分析文本.在解析每个句子后,它根据一些规则来包含错误的项目.用户可以中断此过程,这很重要.如何使用某些第三方Delphi库来一般并行化这个过程?在目前的状态下,我在检查后立即着色.因此,用户可以看到进度.

gab*_*abr 9

算法如下:

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

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

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

  • 字典是否可能是只读的,不需要锁定? (2认同)