![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте! Образовался такой вопрос: Как взять данные из memo, которые ещё не были взяты потоком. Наверное непонятно.
У меня есть Memo, в котором хранятся данные. Как загрузить в поток строку, которую ещё не взял один из потоков. Я понимаю, что сдесь нужна критическая секция, но как использовать её в связке с memo не пойму. В memo есть такие строки: чавыа ывфыв укцук выаывп Нужно что бы каждый поток взял по одной строке, а не все потоке одну строку. Последний раз редактировалось babay89, 30.08.2013 в 14:47. |
|
#2
|
||||
|
||||
|
как вариант:
Код:
interface
uses
SyncObjs,
...
implementation
var
CriticalSection: TCriticalSection;
function GetMemo: String;
begin
CriticalSection.Enter;
if Form1.Memo1.Lines.Count>0 then
begin
Result:=Form1.Memo1.Lines[0];
Form1.Memo1.Lines.Delete(0);
end else Result:='';
CriticalSection.Leave;
end;
...
initialization
CriticalSection:=TCriticalSection.Create;
finalization
CriticalSection.Free;из потоков вызывай GetMemo. если удалять нельзя, то завести текущий номер строки и в блоке Enter-Leave возвращать строку по номеру и делать номеру инкремент. Последний раз редактировалось NumLock, 30.08.2013 в 15:27. |
|
#3
|
||||
|
||||
|
Немного добавлю в код:
Код:
interface
uses
SyncObjs,
...
implementation
var
CriticalSection: TCriticalSection;
function GetMemo: String;
begin
CriticalSection.Enter;
try //<------------------------------------------------
if Form1.Memo1.Lines.Count>0 then
begin
Result:=Form1.Memo1.Lines[0];
Form1.Memo1.Lines.Delete(0);
end else Result:='';
finally
CriticalSection.Leave;
end;
end;
...
initialization
CriticalSection:=TCriticalSection.Create;
finalization
CriticalSection.Free; |
|
#4
|
|||
|
|||
|
Цитата:
Хоть и первая функция подходит, но она удаляет ровно столько строк, сколько потоков, а нужно что бы удалялось, пока в мемо не будет строк. Последний раз редактировалось babay89, 01.09.2013 в 16:14. |
|
#5
|
||||
|
||||
|
ну так если создать столько потоков сколько строк в Мемо, то все будет хорошо.
|
|
#6
|
|||
|
|||
|
Цитата:
Да 3-4 тысячи потоков не есть гуд. Последний раз редактировалось babay89, 01.09.2013 в 17:07. |
|
#7
|
||||
|
||||
|
ну тогда цикл создания потоков от 0 до кол-ва строк в Мемо - 1, с ограничением количества потоков семафором. либо цикл с удалением строк из Мемо пока не кончатся. вариантов много...
|