java - 在单独的 Android 线程上调用时,emit 不起作用

标签 java c++ multithreading qt qml

对不起我的英语。

有一段代码在单独的线程(Java 代码)上运行在 android 上,如下所示:

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了解所有详情。

关于java - 在单独的 Android 线程上调用时,emit 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23934896/

相关文章:

java - 用于 bean 验证的自定义验证消息

java - xuggle-xuggler 5.4 编码音频时出现 NullPointerException

java - 尝试从 csv 文件构建行时忽略逗号

c++ - 如何在gentoo上编译Mellanox libvma?

c++ - 为什么 GPU 外部的顶点变换与 GPU 内部的顶点变换不同?

c++多线程代码设置不同线程的优先级

java - if else 语句错误

python - Python调用Google Logging Library时,如何定义日志文件的位置?

c++ - 多线程数组数组?

java - 并行 IntStream 破解