Russian Qt Forum
Ноябрь 23, 2024, 00:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Выгрузка скриптов из QScriptEngine и о нескольких скриптах на одном ядре  (Прочитано 5115 раз)
Denjs
Гость
« : Март 18, 2011, 14:52 »

Несколько вопросов касающихся того, как работать со списком скриптов которые загружены в QScriptEngine ?
 
Прочитав описание QScriptEngineAgent понимаю, да и просто поигравшись с системой, понимаю, что реально, скрипт не выгружается после исполнения в ряде случаев (если у него опрееделены функции, он создавал объекты или чтото там ешё) - собственно что я и имею.

Первое что важно: мне надо принудительно выгрузить из скриптового ядра загруженный туда скрипт, и что бы при этом уничтожились все созданные им объекты. Что бы вызвался QScriptEngineAgent::scriptUnload(qint64 scriptId ) у прикрепленного к движку агента...

Параллельно этому возникает вопрос о том, как получить список загруженных сейчас в скриптовый движок скриптов (попытаться рыться в контектсах, и через QScriptContextInfo вытаскивать scriptId() ? )

Пока думаю про то, что бы уничтожать скриптовый движок и создавать его заново, но это попахивает варварством...
« Последнее редактирование: Март 18, 2011, 14:59 от Denjs » Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Март 18, 2011, 15:18 »

Ничего в этом страшного нет. Работает
Записан
Denjs
Гость
« Ответ #2 : Март 18, 2011, 23:13 »

Ничего в этом страшного нет. Работает
вы имеете в виду уничтожать скриптовый движок каждый раз когда мне надо принудительно и гарантированно выгрузить скрипт?

а почему кстати этого не делает abortEvaluation()?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #3 : Март 19, 2011, 09:19 »

В ассистенте написано, что она в соответствии с названием abortEvaluation() прекращает выполнение скрипта загруженного в scriptengine.
Его можно повторно запустить вызовом evaluate().
О выгрузке скрипта с помощью abortEvaluation() не говорится.
Записан
Denjs
Гость
« Ответ #4 : Март 19, 2011, 10:56 »

да в ассистанте понятно что написано.
Но почему метод isEvaluating() продолжает отдавать true после выполнения abortEvaluation() ?

т.е. моя логика примрно такова - раз уж скрипт не исполняется - то зачем его держать в памяти?
в конце концов - для простых скриптов - когда заканчивается его исполнение, то они сразу-же и выгружаются. (если верить описанию QScriptEngineAgent - Detailed Description)... ну нет, так нет..

Цитировать
QScriptEngineAgent - Detailed Description::
 In general terms, a script isn't unloaded until the engine has determined that none of its contents is referenced.
А Есть не геморройный способ вычистить этот самый "its contents", который создан скрптом?
мне для этого надо получить и перебирать контекст в котором исполнялся скрипт??



Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #5 : Март 19, 2011, 11:44 »

Држать скотпь в памя по сле остановки выполнения нужно хотя бы для того чтобы ьвыполнить его снова
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.097 секунд. Запросов: 23.