Size: a a a

2020 December 02

SB

Sergey Bodrov in Delphi & Lazarus
Проблемы только с менеджером памяти при очень интенсивном использовании (тысячи команд в секунду), тогда за неделю-месяц проявляются всякие нехорошие вещи вроде фрагментации памяти кучи, недостаток хендлов и квантовые эффекты освобождения строк.
источник

SB

Sergey Bodrov in Delphi & Lazarus
такие проблемы решаются постоянными (заранее созданными) элементами и строками.
источник

GB

George Bakhtadze in Delphi & Lazarus
Sergey Bodrov
Проблемы только с менеджером памяти при очень интенсивном использовании (тысячи команд в секунду), тогда за неделю-месяц проявляются всякие нехорошие вещи вроде фрагментации памяти кучи, недостаток хендлов и квантовые эффекты освобождения строк.
что за "квантовые эффекты освобождения строк"?
источник

SB

Sergey Bodrov in Delphi & Lazarus
George Bakhtadze
что за "квантовые эффекты освобождения строк"?
Например, если OnPaint происходит отрисовка строки, а в это время менеджер памяти в другом потоке ее освобождает.
источник

VA

Viktor Akselrod in Delphi & Lazarus
Sergey Bodrov
Например, если OnPaint происходит отрисовка строки, а в это время менеджер памяти в другом потоке ее освобождает.
как много секретов мы еще не знаем...
источник

SB

Sergey Bodrov in Delphi & Lazarus
Viktor Akselrod
как много секретов мы еще не знаем...
Это редкое явление, я его пару лет ловил. Потом создал пример с гарантированным срабатыванием в TListView.OnData.
источник

VA

Viktor Akselrod in Delphi & Lazarus
Sergey Bodrov
Это редкое явление, я его пару лет ловил. Потом создал пример с гарантированным срабатыванием в TListView.OnData.
сорян, но с учетом двойного срабатывания Execute у потока - не верю (с)
источник

SB

Sergey Bodrov in Delphi & Lazarus
Viktor Akselrod
сорян, но с учетом двойного срабатывания Execute у потока - не верю (с)
Убери CriticalSection и убедись
источник

VA

Viktor Akselrod in Delphi & Lazarus
dfm забыл
источник

VA

Viktor Akselrod in Delphi & Lazarus
Sergey Bodrov
Убери CriticalSection и убедись
ес-но общие данные между потоками должны синхронизироваться
вообще конечно нужно время, чтобы понять твою демку
источник

z

zamtmn in Delphi & Lazarus
George Bakhtadze
а что за причины? навскидку никаких проблем не вижу, только в commandManager надо будет поменять, чтоб учесть, что из другого потока с UI взаимодействие идет
Они должны менять данные в основном потоке. Придется делать целую прослойку для совместного использования данных. Кроме того, это единственная причина для многопоточности)) проблем с производительностью нет, распаралеливать ничего тоже ненадо
источник

SB

Sergey Bodrov in Delphi & Lazarus
источник

z

zamtmn in Delphi & Lazarus
zamtmn
Они должны менять данные в основном потоке. Придется делать целую прослойку для совместного использования данных. Кроме того, это единственная причина для многопоточности)) проблем с производительностью нет, распаралеливать ничего тоже ненадо
На данном этапе причин имею ввиду
источник

VA

Viktor Akselrod in Delphi & Lazarus
у тебя синхронизация криво сделана даже в текущем варианте
если оно и работает - то только по чистой случайности
источник

SB

Sergey Bodrov in Delphi & Lazarus
Viktor Akselrod
у тебя синхронизация криво сделана даже в текущем варианте
если оно и работает - то только по чистой случайности
Оно специально криво сделано, чтобы определить границы дозволенного.
источник

z

zamtmn in Delphi & Lazarus
Sergey Bodrov
Я бы сделал очередь (или стек) команд. По таймеру или внутри фонового потока, брать из очереди команды по одной и выполнять. Если попалась интерактивная команда, требующая действия пользователя, то ставить на очередь признак паузы, пока не будет получен ответ пользователя, который добавляется в голову очереди как команда.
Т.е. за многопоточность
источник

Д

Дмитрий in Delphi & Lazarus
Sergey Bodrov
Оно специально криво сделано, чтобы определить границы дозволенного.
Это по принципу: Я знаю отличную шутку про UDP но не факт, что она до вас дойдёт...
источник

VA

Viktor Akselrod in Delphi & Lazarus
Sergey Bodrov
Оно специально криво сделано, чтобы определить границы дозволенного.
это как и зачем?
зачем ты тогда пишешь про "Убери CriticalSection"?

вся UpdateListItem должна быть в локе
источник

VA

Viktor Akselrod in Delphi & Lazarus
общий лок по аналогии с RandomizeItem


ну а уж если и вообще убрать локи, то конечно будет каша.
источник

SB

Sergey Bodrov in Delphi & Lazarus
Viktor Akselrod
это как и зачем?
зачем ты тогда пишешь про "Убери CriticalSection"?

вся UpdateListItem должна быть в локе
Раньше был один общий лок на весь список, который использовался и при чтении элементов, и при обновлении. Но этого оказалось недостаточно. Вот я и экспериментировал.
источник