Обнаружил ситуацию, которая изредка приводит к аварийному завершению Квика.
Стояла задача: при клике по строке таблицы-1 требуется таблицу-1 закрыть, а вместо неё открыть новую таблицу-2 (например, провалиться глубже по дереву).
Хоть это мне сразу и показалось не очень красиво, но попробовал сделать эти действия прямо из коллбэка Таблицы-1.
В нём вызывается DestroyTable(1) и создаётся CreateWindow(2)
Написал, потестировал - работает.
Но работает не на 100% хорошо. Через пол-года обнаружилось, что изредка, примерно в 1-2% случаях Квик падает.
(см. рис)
Долго искал, в чём причина.
Решил, что дело в том, что в каких-то редких случаях коллбэк после отработки пытается зачем-то вернуться к своей родительской таблице, которую он сам же только-что уничтожил.
Переписал скрипт так, что коллбэк только создаёт новую таблицу-2, а для старой таблицы-1 делается пометка, по которой уже после отработки коллбэка в основном цикле уничтожается происходит DestroyTable(1).
Теперь ошибка не проявляется.
Также плохо иногда может заканчиваться вызов из коллбэка функции Clear(1) для родительской таблицы.
Наверное, если я прав, имеет смысл в документации указать, что не надо из коллбэка вызывать DestroyTable() и Clear()
Стояла задача: при клике по строке таблицы-1 требуется таблицу-1 закрыть, а вместо неё открыть новую таблицу-2 (например, провалиться глубже по дереву).
Хоть это мне сразу и показалось не очень красиво, но попробовал сделать эти действия прямо из коллбэка Таблицы-1.
В нём вызывается DestroyTable(1) и создаётся CreateWindow(2)
Написал, потестировал - работает.
Но работает не на 100% хорошо. Через пол-года обнаружилось, что изредка, примерно в 1-2% случаях Квик падает.
(см. рис)
Долго искал, в чём причина.
Решил, что дело в том, что в каких-то редких случаях коллбэк после отработки пытается зачем-то вернуться к своей родительской таблице, которую он сам же только-что уничтожил.
Переписал скрипт так, что коллбэк только создаёт новую таблицу-2, а для старой таблицы-1 делается пометка, по которой уже после отработки коллбэка в основном цикле уничтожается происходит DestroyTable(1).
Теперь ошибка не проявляется.
Также плохо иногда может заканчиваться вызов из коллбэка функции Clear(1) для родительской таблицы.
Наверное, если я прав, имеет смысл в документации указать, что не надо из коллбэка вызывать DestroyTable() и Clear()