Qjsengine Skript -Funktion (Slot), die nicht im Thread der Engine ausgeführt werden
Posted: 25 Feb 2025, 08:44
[Qt 6.5.3 mit Visual Studio 2019] < /p>
Ich verwende einen Qjsengine in einem Worker -Thread. Einige Objekte meiner Anwendung sind über das Skript aus zugegriffen. Einige von ihnen leben in einem anderen Faden, z. Objekte umgehen Netzwerkkommunikation.
Ich möchte Signale dieser Objekte mit Skriptfunktionen verbinden. Die Verbindung funktioniert, aber die Skriptfunktion wird im Anrufer -Thread anstelle des Threads der Engine ausgeführt. Dies führt zu Abstürzen, wenn gleichzeitig der Motor andere Dinge in seinem eigenen Thread tut. (Qjsengine Nicht -Thread -Safe.) < /P>
Ich habe versucht, ein Kontextobjekt an Connect () zu übergeben, das den richtigen Thread angibt, es hat jedoch keinen Effekt. Der Thread wird nur umgeschaltet, wenn der Steckplatz eine reale C ++-Objektfunktion ist.
minimal Hauptfaden). Der Thread -Auslauf -Methode instanziiert ein QJSengine, veröffentlicht den QTimer in der Engine und führt ein kurzes Skript aus, das das Zeitüberschreitungssignal des Timers an eine Skriptfunktion verbindet. Problem: Die Skriptfunktion wird im Timer -Thread ausgeführt (= Hauptfache). < /P>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
JsThread t;
t.start();
return a.exec();
}
< /code>
class TestObj : public QObject {
Q_OBJECT;
public:
Q_INVOKABLE void callcpp() {
qDebug()
Does anyone know how to force the JS code to be executed in the engine's thread?
Ich verwende einen Qjsengine in einem Worker -Thread. Einige Objekte meiner Anwendung sind über das Skript aus zugegriffen. Einige von ihnen leben in einem anderen Faden, z. Objekte umgehen Netzwerkkommunikation.
Ich möchte Signale dieser Objekte mit Skriptfunktionen verbinden. Die Verbindung funktioniert, aber die Skriptfunktion wird im Anrufer -Thread anstelle des Threads der Engine ausgeführt. Dies führt zu Abstürzen, wenn gleichzeitig der Motor andere Dinge in seinem eigenen Thread tut. (Qjsengine Nicht -Thread -Safe.) < /P>
Ich habe versucht, ein Kontextobjekt an Connect () zu übergeben, das den richtigen Thread angibt, es hat jedoch keinen Effekt. Der Thread wird nur umgeschaltet, wenn der Steckplatz eine reale C ++-Objektfunktion ist.
minimal Hauptfaden). Der Thread -Auslauf -Methode instanziiert ein QJSengine, veröffentlicht den QTimer in der Engine und führt ein kurzes Skript aus, das das Zeitüberschreitungssignal des Timers an eine Skriptfunktion verbindet. Problem: Die Skriptfunktion wird im Timer -Thread ausgeführt (= Hauptfache). < /P>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
JsThread t;
t.start();
return a.exec();
}
< /code>
class TestObj : public QObject {
Q_OBJECT;
public:
Q_INVOKABLE void callcpp() {
qDebug()
Does anyone know how to force the JS code to be executed in the engine's thread?