Closed kstrizhov closed 9 years ago
@aurusov @k-alexandrovsky
Сделал обновление графа в процессе поиска, но почему -то некоторые вершины рисуются без связей с предками, а потом в дальнейшем между такими вершинами появляются какие-то непонятные связи, будто бы он позднее определил кто для кого потомок\предок. В итоге рисует пока ерунду.
По идее каждая новая запись после того, как ее распарсили, добавляет в дерево новую вершину, и у нее обязательно должен быть предок, то есть граф всегда связный во время процесса поиска. Грешу либо на свой метод отрисовки и способ хранения последней добавленной вершины, либо я чего-то не учитываю в алгоритме поиска.
Посмотрел номера вершин, которые поподают в функцию отрисовки, они почему-то идут через одну, такое ощущение, что сериализуются быстрее, чем происходит обновление графа.
Менял скорость обновления здесь, повлияло вот таким образом.
Пока думаю, как это исправить.
Выглядит так, что контейнер вершин не под мьютексом. Со стороны сериализатора ему нужен write_lock. Со стороны графа - read_lock.
Граф строится в режиме реального времени. Есть ошибка - найденный путь заполняется, но не отрисовывается заданным стилем.
@aurusov, мы обсуждали на консультации, что у меня в конструкторе есть копипаста (в теле конструктора и в TimerTask
е), которую надо убрать. Может на консультации уже был глаз замылен, и я не обратил на это ваше внимание, но у меня в первом случае вызывается метод drawGraph()
, а во втором drawNewVertex()
. И это все обернуто в стандартную конструкцию
graph.getModel().beginUpdate();
try {
//преобразования с графом
} finally {
graph.getModel().endUpdate();
}
Я вижу смысл только в идее вынести вообще все в метод, чтобы вызывать пустой конструктор, а рисовать все после прогона, дергая его в другом месте. С копипастой остался вопрос.
Я вижу смысл только в идее вынести вообще все в метод, чтобы вызывать пустой конструктор, а рисовать все после прогона, дергая его в другом месте.
Да, так и договаривались
С копипастой остался вопрос.
В чем разница в коде между методами ?
drawGraph
строит дерево со всеми вершинами, отсериализованными из БД на момент вызова, вызывается один раз при создании окна, drawNewVertex
по таймеру отрисовывает разницу между отсериализованными вершинами и отображенными на экране.
Переименуй их, чтобы по названию было понятно.
Исправил, все работает.
Отлично. Ошибка очень обидная, думал, что перерисовка окна вызывает этот метод. Закрывай таску.
Необходимо реализовать возможность построения новых вершин "на лету", по мере добавления новых записей в базу данных.
Привязать к шкале масштабирования времени моделирования.