![]() |
|
|
Регистрация | << Правила форума >> | 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, с ограничением количества потоков семафором. либо цикл с удалением строк из Мемо пока не кончатся. вариантов много...
Пишу программы за еду. __________________ |