|
|
|
Добавление и удаление строк в 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 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
wadman, всё с этого началось 21126824 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 15:18 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRock, Ok! Макнули. Ушел читать матчасть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 15:49 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Михаил Евгеньевич, Harvey-Многопоточность, как это делается в Delphi(2002) Там указано, что крит.секции не работают с VCL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 15:54 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Сюзанна, Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 16:00 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
СюзаннаТам указано, что крит.секции не работают с VCL Не знаю, что где указано. "крит. секции" везде и со всем работают, ели их использовать. А VCL их не использует, как и каких-либо других средств синхронизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 16:03 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRockСюзаннаТам указано, что крит.секции не работают с VCL Не знаю, что где указано. "крит. секции" везде и со всем работают, ели их использовать. А VCL их не использует, как и каких-либо других средств синхронизации.Synchronize ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 18:06 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)YuRockпропущено... Не знаю, что где указано. "крит. секции" везде и со всем работают, ели их использовать. А VCL их не использует, как и каких-либо других средств синхронизации.Synchronize Я ждал этого поста :) Synchronize - метод класса TThread. Если считать TThread частью VCL, то, конечно, да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 18:15 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRockЕсли считать TThread частью VCL, то, Но, к счастью, так даже разработчики дельфИ не считают и поместили Classes.pas в папку Rtl\Common, а не в папку VCL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 18:20 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Vizit0rпо таймеру обновляю один из журналов в окне. Из других потоков скидывают в TList строки для добавленияЗачем по таймеру, зачем TList, зачем Critical... На, балуйся: Код: 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. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 18:23 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRock> Synchronize - метод класса TThread. Если считать TThread частью VCL Не хотелось встревать в Вашу высоконаучную дискуссию, но во-первых, "Synchronize" можно сделать и без TThread, а во-вторых, "если считать TThread частью VCL" - это щас серьёзный вопрос был или юмор такой? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 18:24 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам"а во-вторых, если считать TThread частью VCL" - это щас серьёзный вопрос был или юмор такой? Во-вторых, это не вопрос был, а речь шла о VCL. А во-первых, речь шла о средствах синхронизации данных между разными потоками. Так или иначе, Synchronize таким средством не является - он "ставит задание в очередь" на выполнение функции в другом (гуишном) потоке, а не предоставляет монопольный доступ к данным, как это делают средства синхронизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 18:39 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
С VCL-ными визуальными компонентами нельзя из потока работать. Необходимо передавать данные в основной, а уже оттуда в компоненты грузить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 20:18 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
JaDi, С некоторыми свойствами VCL компонентов работать из не основного потока можно. Особенно на чтение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 20:20 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRockГаджимурадов Рустам"а во-вторых, если считать TThread частью VCL" - это щас серьёзный вопрос был или юмор такой? Во-вторых, это не вопрос был, а речь шла о VCL. А во-первых, речь шла о средствах синхронизации данных между разными потоками. Так или иначе, Synchronize таким средством не является - он "ставит задание в очередь" на выполнение функции в другом (гуишном) потоке, а не предоставляет монопольный доступ к данным, как это делают средства синхронизации.я бы сказал у вас довольно узкое представление о средствах синхронизации. кстати, я в корне не согласен с тем куда его поместили, либо на крайний случай как его назвали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 21:50 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Если никто не против, отвечу автору)) Пожалуй, ничего тупее, чем делать Delete(0) в цикле, придумать нельзя. Нормальные варианты: - удалять строки путем копирования Memo.Text во временный StringList, обработка данных там и возврат готового результата обратно в Memo.Text (Undo ведь не надо в Memo, которое read only) - добавлять строки в начало списка (не надо мудохаться с прокруткой) - использовать для лога ListBox/ListView/VirtualTree (в виртуальном режиме это будет работать мгновенно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 21:56 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)узкое представление о средствах синхронизацииданных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 21:58 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
rgreatJaDi, С некоторыми свойствами VCL компонентов работать из не основного потока можно. Особенно на чтение.С какими, например? Да сами объекты же компонентов могут перестать существовать во время доступа к ним не из гуи-потока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 22:00 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
rgreat, можно то можно, но сегодня можно, завтра ищем баги - порочная практика ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 22:40 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRockС какими, например? Код: pascal 1. вполне рабочая практика для многих случаев. Да сами объекты же компонентов могут перестать существовать во время доступа к ним не из гуи-потока. К таким обращатся не надо. По меньшей мере не убедившись в их наличии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 00:09 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Вообще потоки почти всегда надо убивать до того как помрет GUI который их использует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 00:38 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
rgreat, Да понятно, что бывают случаи, когда что-то более менее безопасно. Но со временем получается наступать на грабли. rgreat Код: pascal 1. Наверняка использует свойство Handle для посылки BM_GETCHECK. И если это произойдет до момента, когда окно уже создано (объект-то уже давно создан, но HandleAllocated=False), то получим CreateWindow, вызванный не в том потоке, распихивание хендлов по всяким глобальным несинхронизированным массивам не в том потоке,... В общем - полный крах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 01:06 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
rgreatВообще потоки почти всегда надо убивать до того как помрет GUI который их использует.Это понятно, это обязательно даже в случае строгого НЕобращения к VCL-объектам из доп. потока. Такова логика - поток запустился после появления окон - значит и завершиться должен до закрытия окон, на внешний вид которых он влияет (и/или от которых зависит). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 01:10 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
результат: Код Код: 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. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. На экстрим-тестах с добавлением по 15-20 к сообщений в каждый апдейт (а таймер на 200 мс стоит) - форма почти незаметно дергается при перетаскивании. При обычной работе с окном (не перетаскивании) подлагивания вообще не видны. Что и требовалось. fd00ch >>- удалять строки путем копирования Memo.Text во временный StringList, обработка данных там и возврат готового результата обратно в Memo.Text (Undo ведь не надо в Memo, которое read only) для FMX сделано почти так, только без ненужного SL. Для VCL заметно быстрее работает через замену кучи строк за раз (см. код) >>- добавлять строки в начало списка (не надо мудохаться с прокруткой) тяжелое наследие :) Пробовал пару лет назад изменить, юзвери в один голос просили вернуть обратно, ибо привычно! >>- использовать для лога ListBox/ListView/VirtualTree (в виртуальном режиме это будет работать мгновенно)[/quot] Неудобно. В Memo можно быстро и легко копировать, удалить лишние строки и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 10:43 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRockrgreatJaDi, С некоторыми свойствами VCL компонентов работать из не основного потока можно. Особенно на чтение.С какими, например? Да сами объекты же компонентов могут перестать существовать во время доступа к ним не из гуи-потока. Тот же memo -- будет сыпаться разными AV при попытке писать в него из других потоков, например, те же логи (и чем больше/чаще пишутся в него данные -- тем больший шанс словить проблемы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 10:52 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
JaDiТот же memo -- будет сыпаться разными AV при попытке писать в него из других потоков а можно подробнее? Лучше пошагово, при каком способе добавления, и каков механизм возникновения AV при этом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 14:37 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Док, по большому счету - любое обращении к любому свойству объекта TMemo из не гуи-потока может породить исключения, и не только AV. И не только исключения, а просто порчу памяти, что хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 14:45 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRockпо большому счету - любое обращении к любому свойству объекта TMemo из не гуи-потока может породить исключения, и не только AV. И не только исключения, а просто порчу памяти, что хуже.Не говори ерунды, в большинстве своём работа с мемо сводится к посылке сообщений, которые вполне потокобезопасны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 15:50 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
white_niggerНе говори ерунды, в большинстве своём работа с мемо сводится к посылке сообщений, которые вполне потокобезопасны SendMessage и Dispath - посылка сообщений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 16:09 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
white_niggerНе говори ерунды, в большинстве своём работа с мемо сводится к посылке сообщений Ну опять же ты ерунду говоришь. Посылка сообщений использует свойство Handle, которое использует метод GetHandle, который отнюдь не потокобезопасен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 16:15 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
wadmanSendMessage и Dispath - посылка сообщений?Первое да. Второе нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 16:18 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
white_niggerв большинстве своём работа с мемо сводится к посылке сообщений вот и я об этом wadmanSendMessage и Dispath - посылка сообщений? поясни © :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 17:43 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_wadmanSendMessage и Dispath - посылка сообщений?Первое да. Второе нет Ни то ни другое не отправляет сообщений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 18:21 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Докпоясни © :) Да что тут пояснять? И то и другое вызывает напрямую обработчики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 18:22 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
wadmanДа что тут пояснять? И то и другое вызывает напрямую обработчики. Да нет, это не так. На прямую вызывается обработчик только для окна, созданного в потоке, в котором произошел вызов SendMessage. Иначе - шлет сообщение в "дополнительную" очередь и ожидает его обработки. Так или иначе сообщение будет обработано в потоке, где создано окно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 18:32 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRockДа нет, это не так. Согласен... Перегрелся малость. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 18:36 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
AV, "потокобезопасность"... Yопта, ну вот зачем хнёй страдать... :( Тупо создайте в гуи-окне обработчика кастом-сообщений, да и шлите в него из потоков все, что хотите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 18:39 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
wadman, Хотя написано еще круче: MSDN:SendMessage If the specified window was created by the calling thread, the window procedure is called immediately as a subroutine. If the specified window was created by a different thread, the system switches to that thread and calls the appropriate window procedure . Как будто можно просто взять и "переключить" потоки, ага. Какое-то сообщение наполовину обработалось, тут поток переключили, обработали сообщение из другого, вернули, и обработали половину первого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 18:39 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRockи обработали половину первого "вторую половину" хотел написать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 18:41 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRockКак будто можно просто взять и "переключить" потоки Описали красиво, да. Вот и угадай, что в недрах реально происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 18:49 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
wadmanОписали красиво, да. Вот и угадай, что в недрах реально происходит. Ну моё гадание видит 2 пункта: 1. Очередь сообщений потому и очередь, что следующее сообщение не может начать обрабатываться, пока не закончена обработка предыдущего. Это означает, что сообщение, поступившее в очередь через SendMessage из другого потока, будет ждать как минимум завершения этой обработки (предыдущего сообщения); 2. Если во время обработки сообщения из других потоков в эту очередь поступило несколько сообщений через SendMessage, то они обязательно будут ждать как минимум и окончания обработки этого первоначального сообщения, и друг друга, т.е. еще одна очередь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 18:58 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRockНу моё гадание видит 2 пункта: Ставлю на то, что в таком случае SendMessage возводит внутренний флаг для GetMessage или PeekMessage, которые в свою очередь этот флаг сбрасывают после обработки. В винде любят такие хитрости, скрытые от посторонних глаз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 19:05 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
YuRock, wadman, из процитированного вами обоими следует вывод, что YuRockлюбое обращении к любому свойству объекта TMemo из не гуи-потока может породить исключения ? По-моему, наоборот? По-крайней мере, если общаться между потоками посредством SendMessage/PostMessage ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 19:41 |
|
||
|
Добавление и удаление строк в TStringList
|
|||
|---|---|---|---|
|
#18+
Док, между YuRockобращении к любому свойству объекта TMemoи Докобщаться между потоками посредством SendMessage/PostMessage серьезная разница. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2018, 19:48 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2041311]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
155ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 265ms |
| total: | 512ms |

| 0 / 0 |
