![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
JohnZ |
![]()
Сообщение
#1
|
Участник ![]() ![]() Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: ![]() ![]() ![]() |
Всем Здравия !
Уважаемые форумчане, возникла такая проблема, - в QScriptEngine было добавлено несколько скриптовых модулей. Каждый модуль обслуживает свою форму, которая в данный момент видна на экране. Модуль добавляется стандартно - engine->evaluate(script, name); Соответственно при закрытии формы, необходимо убрать и её модуль из QScriptEngine. Подскажите плз, как это можно сделать ? |
|
|
![]() |
lanz |
![]()
Сообщение
#2
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Дебаггер показывает скомпилированные скрипты. Естественно, каждый раз когда вы вызываете evaluate, создается новый объект, содержащий скомпилированный код, поскольку неизвестно какому предыдущему объекту соответствует этот код.
Мне кажется, это забота QScriptEngine следить чтобы эти объекты вовремя удалялись. И нет ничего страшного что они некоторое время копятся. Если хотите чтобы такой объект был только один, используйте http://doc.qt.io/qt-4.8/qscriptprogram.html#details и вторую перегрузку http://doc.qt.io/qt-4.8/qscriptengine.html#evaluate-2 |
|
|
JohnZ |
![]()
Сообщение
#3
|
Участник ![]() ![]() Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: ![]() ![]() ![]() |
Дебаггер показывает скомпилированные скрипты. Естественно, каждый раз когда вы вызываете evaluate, создается новый объект, содержащий скомпилированный код, поскольку неизвестно какому предыдущему объекту соответствует этот код. Мне кажется, это забота QScriptEngine следить чтобы эти объекты вовремя удалялись. И нет ничего страшного что они некоторое время копятся. В моём случае это как раз и может стать проблемой, т.к. из списка материалов в несколько тыс. сделать N-ное кол-во раз отчёт по движению (Карточка движения), и все скрипты останутся в "мозгу" у engine ![]() он тоже так-же "зависнет" в "мозгу" у engine N-ное кол-во раз. Постоянный скрипт один, он виден на скрине первым, остальные должны быть приходяще-уходящие, ![]() Может можно эту траблу решить с пом-ю Push/Pop Context ? Совсем топорно делать (пересоздавать engine) не хоц-ца ... Может есть примерчик ? Цитата Если хотите чтобы такой объект был только один, используйте http://doc.qt.io/qt-4.8/qscriptprogram.html#details и вторую перегрузку http://doc.qt.io/qt-4.8/qscriptengine.html#evaluate-2 Не подходит, т.к. (полный) скрипт модульный, и формируется динамически в зависимости от выбора юзверя. В разное время может быть до 5-ти разных модулей, и если они начнут плодиться по закону Фибоначи ... ![]() Сообщение отредактировал JohnZ - 23.7.2015, 10:11 |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 16.4.2025, 14:13 |