当调用一个单独的android线程时,Emit不工作

emit is not working when calling on a separate android thread

本文关键字:线程 android Emit 工作 单独 调用 一个      更新时间:2023-10-16

不好意思。

有一个代码运行在android上的一个单独的线程(Java代码),像这样:

public class ClientThread extends Thread 
{
    public void run()
    {
        MainActivity.nativeMethod(); // not working
    }
}
public class MainActivity extends QtActivity
{
    private static final String TAG = "MainActivity";
    private static MainActivity _instance = null;
    private static ClientThread _clientThread = null;
    public MainActivity()
    {
        _instance = this;
    }
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        nativeMethod(); // working
        _clientThread = new ClientThread();
        _clientThread.start();
    }
    public static native void nativeMethod();
}

有c++桥:

class TestObject : public QObject
{
    Q_OBJECT
public:
    explicit TestObject(QObject *parent = 0);
    static TestObject *getInstance();
Q_SIGNALS:
    void nativeMethod();
public Q_SLOTS:
};
static void nativeMethod(JNIEnv *, jclass)
{
        qDebug() << "works threaded or non-threaded calls But not below on threaded call.";
    emit TestObject::getInstance()->nativeMethod();
}

也是一个QML连接:

import TestObjectPackage 1.0
Connections
{
    target: TestObjectPackage.testObjectInstance
    onNativeMethod:
    {
        console.log("QML received signal!");
    }
}

jniNativeMethod每次调用,但发出不向单独线程上的QML发送信号。你能帮我吗?

Qt可以通过不同的线程发送信号。它记录哪个对象"属于"哪个线程,并相应地传递信号。

但是,您需要确保接收线程实际处理传入信号。这可以通过在接收线程中安装Qt主循环或手动查询Qt队列来实现。

详情见http://qt-project.org/wiki/ThreadsEventsQObjects