複数のスレッド/プロセスから「listMessages」と呼ばれる TListBox に書き込みたいのですが、これを行うには次の 2 つの手順があります。
1- オブジェクトを追加する場合:
procedure Log(Msg: String; Color: TColor);
begin
listMessages.Items.AddObject(Msg, Pointer(Color));
listMessages.ItemIndex := listMessages.Items.Count -1;
end;
2- TIdCriticalSection と呼ばれるprotectListMessagesを使用:
procedure TMainForm.safelyLogMessage(mess : String);
begin
protectlistMessages.Enter;
try
listMessages.Items.Add(mess);
listMessages.ItemIndex := listMessages.Items.Count -1;
finally
protectListMessages.Leave;
end;
end;
どちらが最適か (高速 + スレッド セーフ) を教えてください。または、スレッド/プロセスから TListBox にメッセージを書き込む 3 番目の方法を教えてください。