|
|
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
по таймеру обновляю один из журналов в окне. Из других потоков скидывают в TList строки для добавления. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. множественное построчное удаление - это как бы полный тупик, ибо ОЧЕНЬ медленно - каждое удаление это несколько отсылов сообщений. И если в списке на добавку больше 20-30 строк - то по факту главный поток виснет на этом всем. Пока что из пришедшего в голову - брать первую из строк на удаление, брать Memo.Text, находить в нем эту строку (каждая строка за счет timestamp уникальна, так что накладок не будет), удалять ее и все что после нее, а потом добавлять всё новое, опять же в виде одной строки с #10#13. Может кто-то еще сталкивался, как решали вопрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 12:33 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Vizit0rМожет кто-то еще сталкивался, как решали вопрос? Добавь из потока управление командами BeginUpdate, EndUpdate и работа со строками между ними. Либо создавай между ними буфер, после работы с которым и обновляй что нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 12:37 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
wadmanVizit0rМожет кто-то еще сталкивался, как решали вопрос? Добавь из потока управление командами BeginUpdate, EndUpdate и работа со строками между ними. Либо создавай между ними буфер, после работы с которым и обновляй что нужно. 1) обновлять же все равно придется из главного потока, что я выигрываю? 2) так у меня же и есть буфер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 12:40 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Vizit0r1) обновлять же все равно придется из главного потока, что я выигрываю? А это от программиста зависит. Я много чего делал со строками в главном потоке с подачки доп.потоков и 20-30 строк это мелочи, если там конечно нет предварительного поиска по сотням тысяч строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 12:48 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
22.01.2018 12:33, Vizit0r пишет: > StealthForm.SystemJournalMemo.Lines.BeginUpdate; Что за идиотская мания пихать Memo во все дыры, включая те, куда оно не лезет? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 12:49 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Dim200022.01.2018 12:33, Vizit0r пишет: > StealthForm.SystemJournalMemo.Lines.BeginUpdate; Что за идиотская мания пихать Memo во все дыры, включая те, куда оно не лезет? переведи (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 13:11 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
А зачем ты удаляешь из Мемо? Как делал я: Если надо в онлайне лог выводить, то через TCriticalSection напрямую в Мемо пишу из потока. Код: pascal 1. 2. 3. Если в конце лог вывести или по таймеру обновлять, то через TStringList. Пихаем из всех потоков в TStringList опять же в CriticalSection, а потом в мемо напрямую присвоением Memo.Lines:=TStringList-переменная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:22 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Михаил Евгеньевич, Ты в исходники TMemo, TCustomEdit, TControl... свой CritSec тоже повставлял? Если да - тогда ладно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:26 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRock, Не понял тебя. Что не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:31 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Михаил Евгеньевич, Всё не так будет, когда окно решит перерисоваться, например, и дернет Form1.Memo1.Lines в момент, когда другой поток спокойненько себе зайдет в CritSec.Enter и изменит Memo1.Lines. Произойдут феерические вещи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:33 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRock, У меня Утилита работает уже больше года. Никаких феерических вещей не происходит. Все обращения к Memo, к кторому обращается поток через CritSec. Не для того ли CriticalSections придуманы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:38 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRock, Насколько я понимаю, пока поток из CritSec не выйдет, он не даст перерисовать Memo. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:39 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Через критические секции работаю со всеми, практически, элементами на форме. Это и Чекбоксы и Радиогруппы, и Эдиты и прогрессбары и всё остальное. Позволяет менять настройки обработки данных во время выполнения потока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:41 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Михаил ЕвгеньевичНе для того ли CriticalSections придуманы? CriticalSections придуманы для синхронизации данных между разными потоками. Ты же своей CritSec только ненадолго замедляешь поток, который изменяет данные, а в потоке, который их читает, использования твоей "CritSec" нету (во всяком случае в куче мест исходников VCL). Михаил ЕвгеньевичУ меня Утилита работает уже больше года Значит пока везет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:41 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Михаил ЕвгеньевичЧерез критические секции работаю со всеми, практически, элементами на форме. Это и Чекбоксы и Радиогруппы, и Эдиты и прогрессбары и всё остальное. Позволяет менять настройки обработки данных во время выполнения потока. Если при этом всё работает, то можешь смело убирать свои "критические секции" - точно так же будет "работать" и без них. Если, конечно, поток, который "менять настройки обработки данных во время выполнения потока", один. Если несколько - то часть проблемы они решают, да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:44 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Михаил ЕвгеньевичНасколько я понимаю, пока поток из CritSec не выйдет, он не даст перерисовать Memo Кто не даст? Поток? Поток не может ничего "дать". И CritSec не может ничего дать или не дать, если к ней не было обращения. А в исходниках компонентов VCL к ней нет обращения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:46 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRock, Ай, как ты не прав. Вот если убрать критические секции, то при обращении к визуальным компонентам формы (Ткнуть в чекбокс, например) она наглухо зависнет и поток тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:46 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRock, Вы меня троллите, что ли? Покажите мне Ваш многопоточный проект, пжлст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:48 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Михаил ЕвгеньевичАй, как ты не прав. Вот если убрать критические секции, то при обращении к визуальным компонентам формы (Ткнуть в чекбокс, например) она наглухо зависнет и поток тоже. Значит эти микросекунды, на которые ты тормозишь пишущий поток вызовом CritSec.Enter, и влияют на везение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:48 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRock, Я дико извиняюсь, но при чем тут исходники? Код у Вас выполняется где? В исходниках? Вам бы матчасть почитать, похоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:50 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Михаил ЕвгеньевичВы меня троллите, что ли?нет Михаил ЕвгеньевичПокажите мне Ваш многопоточный проект, пжлст.Не вижу необходимости. Еще раз отвечаю на вопрос. Михаил ЕвгеньевичЧто не так? YuRockCritSec не может ничего дать или не дать, если к ней не было обращения. А в исходниках компонентов VCL к ней нет обращения. Если что-то непонятно в этих двух предложениях - дальше обращайтесь в консерваторию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:52 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Михаил ЕвгеньевичВам бы матчасть почитать, похоже. А, понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:53 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRock, http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/SyncObjs_TCriticalSection.html Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 14:54 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Михаил Евгеньевич, На винде для передачи сообщений из потока придуманы PostMessage. (на Андроиде - Intent) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 15:04 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Михаил ЕвгеньевичYuRock, http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/SyncObjs_TCriticalSection.html Код: pascal 1. 2. 3. Исходники VCL правил на предмет взаимодействия со своими критическими секциями? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 15:09 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=119&tid=2041311]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 429ms |

| 0 / 0 |
