Вот такой выходит у меня лог работы 4 процессов.
1: Processor 9604 Idle
1: Processor 1248 Idle
1: Processor 8596 Idle
1: Collector Start
5: Processor 9604 Idle
5: Processor 1248 Idle
5: Processor 8596 Idle
5: Collector Busy
9: Processor 9604 Idle
9: Processor 1248 Idle
9: Processor 8596 Idle
12: Processor 9604 Idle
12: Collector Idle
12: Processor 1248 Busy
15: Collector Busy
16: Collector Idle
17: Collector Busy
18: Processor 1248 Idle
18: Processor 8596 Busy
20: Collector Idle
21: Collector Busy
22: Collector Idle
22: Processor 8596 Idle
22: Processor 9604 Busy
25: Collector Busy
26: Collector Idle
27: Collector Busy
28: Processor 9604 Idle
28: Processor 1248 Busy
30: Collector Idle
31: Processor 1248 Idle
31: Processor 8596 Busy
33: Processor 9604 Busy
33: Processor 8596 Idle
35: Processor 9604 Idle
35: Processor 1248 Idle
35: Collector Finale
Лог формируется в двух обработчиках событий этих процессов. И там все просто:
procedure TForm50.FileCollectorChangedState(Sender: TObject; State: TFileCollectorState);
begin
case State of
fcStart: Log.Lines.Add(Format('%d: Collector Start', [Log.Lines.Count+1]));
fcIdle: Log.Lines.Add(Format('%d: Collector Idle', [Log.Lines.Count+1]));
fcBusy: Log.Lines.Add(Format('%d: Collector Busy', [Log.Lines.Count+1]));
fcFinale: Log.Lines.Add(Format('%d: Collector Finale', [Log.Lines.Count+1]));
end;
end;
procedure TForm50.FileProcessorChangedState(Sender: TObject; State: TFileProcessorState);
begin
case State of
fpIdle: Log.Lines.Add(Format('%d: Processor %d Idle', [Log.Lines.Count+1, TFileProcessor(Sender).ThreadID]));
fpBusy: Log.Lines.Add(Format('%d: Processor %d Busy', [Log.Lines.Count+1, TFileProcessor(Sender).ThreadID]));
end;
end;
Работает все как надо... параллельно... но вот нумерация строк в логе не последовательная. И что делать? Заводить очередь сообщений в лог?