Qt: Как подключить QScriptEngineDebugger к QScriptEngine в отдельном потоке? - PullRequest
2 голосов
/ 15 января 2010

Мне нужно обрабатывать скрипт в отдельном потоке без GUI, так как скрипт вызывает функцию C ++, обработка которой может занять очень много времени (в секундах). Можно ли подключить QScriptEngineDebugger к моему QScriptEngine в не-графическом потоке?

Проблема в том, что если я поставлю QScriptEngineDebugger в том же потоке, что и QScriptEngine (без графического интерфейса пользователя), то при отладке произойдет сбой отладчика - код показывает, что он хочет создать свое окно отладки, и такое окно может быть создано только в теме GUI. И если я помещу QScriptEngineDebugger в поток GUI, приложение потерпит крах, так как QScriptEngine не является поточно-ориентированным. Есть идеи?

1 Ответ

2 голосов
/ 18 января 2010

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

За кулисами QScriptEngineDebugger использует класс с именем QScriptEngineDebuggerFrontend, который, в свою очередь, использует класс с именем QScriptEngineDebuggerBackend, который, в свою очередь, выполняет множество прямых вызовов механизма и устанавливает в него свой собственный агент. Короче говоря, между отладчиком и двигателем существует большая связь.

Альтернативой является инкапсуляция вашей трудоемкой функции C ++ внутри класса, который запускает трудоемкую функцию в фоновом потоке и издает сигнал, когда трудоемкая функция завершена. Затем подключите сигнал к функции в вашем скрипте для обработки результатов. Обратитесь к следующей документации о том, как подключить сигналы от ваших объектов C ++ к функциям в вашем скрипте:

http://doc.trolltech.com/4.5/qtscript.html#using-signals-and-slots

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...