[英]How to change MS Word spelling check language through Ole in Delphi?
[英]How can I parallelize check spelling using Delphi?
我有一種用Delphi編寫的拼寫檢查器。 它逐句分析文本。 在解析每個句子后,它根據一些規則來包含錯誤的項目。 用戶可以中斷此過程,這很重要。 如何使用某些第三方Delphi庫來一般並行化這個過程? 在目前的狀態下,我在檢查后立即着色。 因此,用戶可以看到進度。
算法如下:
多個拼寫檢查器如何訪問字典是另一個問題。 您可以在每個工作程序中加載字典的副本,或者可以使用鎖保護對字典的訪問(但這會減慢速度)。 如果幸運的話,字典對於讀取是線程安全的,您可以在不鎖定的情況下同時進行查詢。
針對該問題的適當OmniThreadLibrary抽象可以是ParallelTask或BackgroundWorker 。
要並行化,只需從TThread創建一個新的類后代,從中創建一個對象,將部分作業提供給新線程,運行Execute,並在主線程中收集結果。
像這樣:
TMySpellChecker = class(TThread)
protected
FText: String;
FResult: String;
public
procedure Execute; override;
property Text: String read FText write FText;
property Result: String read FResult write FResult;
end;
TMySpellChecker.Execute;
begin
// Analyze the text, and compute the result
end;
在主線程中:
NewThread := TMySpellChecker.Create(True); // Create suspended
NewThread.Text := TextSegment;
NewThread.Execute;
然后線程對象將在后台進行分析,同時主線程繼續運行。
要處理結果,您需要為線程對象的OnTerminate事件分配一個處理程序:
NewThread.OnTerminate := HandleMySpellCheckerTerminate;
必須在對線程對象運行Execute之前完成此操作。
為了允許中斷,一種可能性是將主文本分成段,將段放在主線程的列表中,然后使用線程對象逐個分析段。 然后,您可以允許每次運行之間的中斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.