Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: Denjs от Март 18, 2011, 14:52



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

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

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

Пока думаю про то, что бы уничтожать скриптовый движок и создавать его заново, но это попахивает варварством...


Название: Re: Выгрузка скриптов из QScriptEngine и о нескольких скриптах на одном ядре
Отправлено: Mikhail от Март 18, 2011, 15:18
Ничего в этом страшного нет. Работает


Название: Re: Выгрузка скриптов из QScriptEngine и о нескольких скриптах на одном ядре
Отправлено: Denjs от Март 18, 2011, 23:13
Ничего в этом страшного нет. Работает
вы имеете в виду уничтожать скриптовый движок каждый раз когда мне надо принудительно и гарантированно выгрузить скрипт?

а почему кстати этого не делает abortEvaluation()?


Название: Re: Выгрузка скриптов из QScriptEngine и о нескольких скриптах на одном ядре
Отправлено: Mikhail от Март 19, 2011, 09:19
В ассистенте написано, что она в соответствии с названием abortEvaluation() прекращает выполнение скрипта загруженного в scriptengine.
Его можно повторно запустить вызовом evaluate().
О выгрузке скрипта с помощью abortEvaluation() не говорится.


Название: Re: Выгрузка скриптов из QScriptEngine и о нескольких скриптах на одном ядре
Отправлено: Denjs от Март 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", который создан скрптом?
мне для этого надо получить и перебирать контекст в котором исполнялся скрипт??





Название: Re: Выгрузка скриптов из QScriptEngine и о нескольких скриптах на одном ядре
Отправлено: Mikhail от Март 19, 2011, 11:44
Држать скотпь в памя по сле остановки выполнения нужно хотя бы для того чтобы ьвыполнить его снова