Цитата:
Сообщение от babay89
Не то. Там берется ровно столько строк, сколько потоков. А нужно что бы потоки брали строки пока они не кончятся в мемо.
|
Ну тебе же выше написали как.
Делаешь метод, который возвращает очередную строку из Memo или пустую строку, если строки кончились. Внутри метода надо работать через CriticalSection. Каждый поток для получения данных "дергает" этот метод, если вернулась пустая строка, то завершается (ну или ждет пока не появяться новые данные). Сам метод, в зависимотсти от того, что нужно делать, либо удаляев взятые строки, либо просто запоминает последнюю взятую.
Вот _пример_ второго варианта:
Код:
type
TMyForm = class(TForm)
Memo1 : TMemo;
...
private
FLastProcessedLine : Integer; // поставить в -1 в конструкторе или в OnCreate
public
function GetNextLine : String;
end;
var
csGetNewLine : TCriticalSection;
...
function TMyForm.GetNextLine : String;
begin
csGetNewLine.Enter
Try
If Memo1.Lines.Count-1 > FLastProcessedLine
Then
Begin
Inc(FLastProcessedLine);
Result := Memo1.Lines[FLastProcessedLine];
End
Else Result := '';
Finally
csGetNewLine.Leave;
End;
end;
...
initialization
csGetNewLine := TCriticalSection.Create;
finalization
csGetNewLine.Free;
end.
Как-то так.