QScriptEngine
задокументировано как «входящий», то есть, по сути, вы можете использовать его как многопоточный, но только один QScriptEngine
на поток.
Теперь, если функции job1()
и job2()
могут вообще выполняться одновременно, в принципе, должно быть возможно разделить их на два отдельных QScriptEngine
(легко, если ни одна из функций не использует локальные переменные, только , сложнее, если задействованы глобалы).
- Реализация
runConcurrentJobs()
как функции (или слота) Q_INVOKABLE
в C ++.
Там сделайте что-то вроде
void runConcurrently (const QString &functionname1, QString &functionname2) {
MyScriptThread thread1 (functionname1);
MyScriptThread thread2 (functionname2);
thread1.start();
thread2.start();
thread1.wait ();
thread2.wait ();
// optionally fetch return values from the threads and return them
}
Где MyScriptThread является производным от QThread и реализует QThread :: run () примерно так:
void MyScriptThread::run () {
QScriptEngine engine;
engine.evaluate (common_script_code);
result = engine.evaluate (the_threads_function);
// the_threads_function passed as a QScriptProgram or QString
}