SASGIS - SAS.Планета |
View Issue Details |
|
ID | Project | Category | View Status | Date Submitted | Last Update |
0002044 | SAS.Планета | [All Projects] Баг | public | 21-07-2013 12:45 | 03-11-2013 19:25 |
|
Reporter | Papazol | |
Assigned To | vdemidov | |
Priority | normal | Severity | tweak | Reproducibility | have not tried |
Status | resolved | Resolution | fixed | |
Platform | Windows | OS | XP | OS Version | Professional SP3 |
Product Version | .Nightly | |
Target Version | 131111 | Fixed in Version | 131111 | |
|
Summary | 0002044: Неожиданно прекращается загрузка в режиме Интернет+Кэш |
Description | В указанном режиме двигаюсь по снимку. Сначала тайлы нормально скачиваются и появляются на экране. Через некоторое время (не уверен, что дело тут во времени) после очередного сдвига карты пустые тайлы остаются пустыми, программа пишет, что осталось 0, дальнейшее движение карты не приводит к заполнению пустых тайлов. Однако с помощью Insert+ЛКМ тайлы загружаются. Если закрыть программу, а затем снова открыть, загрузка возобновляется.
Используется кэш Беркли неверсионный. |
Steps To Reproduce | |
Additional Information | |
Tags | No tags attached. |
Relationships | parent of | 0002068 | resolved | vdemidov | Избавиться от пересоздания IBitmapProvider в слоях |
|
Attached Files | SASPlanet.Debug.elf (74,974) 02-08-2013 11:12 http://www.sasgis.org/mantis/file_download.php?file_id=1459&type=bug |
|
Issue History |
Date Modified | Username | Field | Change |
21-07-2013 12:45 | Papazol | New Issue | |
21-07-2013 13:23 | Garl | Note Added: 0012157 | |
31-07-2013 08:22 | vdemidov | Note Added: 0012246 | |
31-07-2013 08:22 | vdemidov | Status | new => feedback |
02-08-2013 11:12 | vdemidov | File Added: SASPlanet.Debug.elf | |
02-08-2013 11:13 | vdemidov | Note Added: 0012278 | |
02-08-2013 11:13 | vdemidov | Status | feedback => confirmed |
02-08-2013 11:13 | vdemidov | Target Version | => 131111 |
07-08-2013 08:20 | vdemidov | Note Added: 0012297 | |
07-08-2013 08:28 | vdemidov | Assigned To | => vdemidov |
07-08-2013 08:28 | vdemidov | Status | confirmed => assigned |
09-08-2013 06:58 | vdemidov | Relationship added | parent of 0002068 |
09-08-2013 10:46 | vasketsov | Note Added: 0012315 | |
09-08-2013 10:57 | vdemidov | Note Added: 0012316 | |
09-08-2013 11:06 | vasketsov | Note Added: 0012317 | |
09-08-2013 11:15 | vdemidov | Note Added: 0012318 | |
09-08-2013 11:16 | vdemidov | Note Added: 0012319 | |
03-11-2013 19:25 | vdemidov | Status | assigned => resolved |
03-11-2013 19:25 | vdemidov | Fixed in Version | => 131111 |
03-11-2013 19:25 | vdemidov | Resolution | open => fixed |
Notes |
|
(0012157)
|
Garl
|
21-07-2013 13:23
|
|
такое поведение замечено не только на беркли
при сдвиге карт ыопределяется что надо скачать 32 тайла, затем сдвигам обратно (там где надо скачать 2-3 тайа) и бац! осталось скачать 0 тайлов!!!
хотя 2-3 так и осталиь не скачаными... |
|
|
|
Нужно воспроизвести в дебажной версии. Сейчас там должны перехватываться ексепшены в фоновых потоках. |
|
|
|
Кажись у меня самого воспроизвелось. |
|
|
|
Итог изысканий: нужно или добавлять в листенеры синхронизазаторы, чтобы избежать вызова полсле того как владелец начал удаляться, или по возможности избегать ситуаций, когда удаляется владелец листенера, сейчас это происходит при пересоздании IBitmapProvider-ов, которое чаще всего происходит при обновлении векторных тайлов. Второй вариант мне нравится больше, тем более что он совпадает с моими планами, но и первым придется скорее всего воспользоваться. |
|
|
|
Может быть по первому варианту тебе даже удастся сделать один легковесный объект типа
TCancellableOperation = record
private
FOperationID: Integer;
FCancelNotifier: INotifierOperation;
strict private
function GetIsCancelled: Boolean;
public
property IsCancelled: Boolean read GetIsCancelled;
end;
или аналогичный интерфейсный объект, чтобы его одного передавать как const вместо пары
const AOperationID: Integer;
const ACancelNotifier: INotifierOperation;
?
Смысл в том, чтобы передавать всё для отбоя в рамках одной сущности, и чтобы она же проверяла сама себя внутри IsCancelled на кончину, без ненужного вытаскивания наружу OperationID и CancelNotifier.
А возможно и байт как флаг смерти владельца туда можно будет всунуть. |
|
|
|
Не, я такого делать не хочу. Пару
const AOperationID: Integer;
const ACancelNotifier: INotifierOperation;
можно передать в любую dll на любом языке без проблем, а тот рекорд, который предлагаешь ты чисто делфовая структура, а интерфейсный объект ИМХО не стоит создавать каждый раз, но вообще уже есть такая вещь называется INotifierOneOperation. |
|
|
|
>можно передать в любую dll на любом языке без проблем
Если честно - не вижу принципиальных отличий в передаче. Там SizeOf как у обычного record-а, все эти IsCancelled вообще никуда не упираются. При передаче только как const вообще никаких проблем не прогнозируется.
>вообще уже есть такая вещь называется INotifierOneOperation
А почему тогда он в тех же экспортах не используется, ведь экспорт всегда как одна операция прерывается? |
|
|
|
>>можно передать в любую dll на любом языке без проблем
>Если честно - не вижу принципиальных отличий в передаче. Там SizeOf как у обычного record-а, все эти IsCancelled вообще никуда не упираются. При передаче только как const вообще никаких проблем не прогнозируется.
Может быть, но мне лень переделывать.
>А почему тогда он в тех же экспортах не используется, ведь экспорт всегда как одна операция прерывается?
Потому что позже появилось. Да и даунлодер и тп. расчитаны именно на пару AOperationID, ACancelNotifier. |
|
|
|
PS: В данном инциденте это полный оффтопик ибо никакого отношения к проблеме не имеет. |
|