当调用一个单独的android线程时,Emit不工作
emit is not working when calling on a separate android thread
不好意思。
有一个代码运行在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
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- Android Ndk - 为C++线程设置名称
- Android 服务和原生线程
- E/libEGL:调用没有当前上下文的 OpenGL ES API (每个线程记录一次) - Android/SDL
- QT 5.7对于Android Main C 线程不持续运行
- std ::线程在Android JNI中引起sigabrt
- 来自Android JNI中任何线程的FindClass
- Android:从其他线程访问OpenGL
- Android NDK 多线程块 UI 响应
- Android 的 c++11 多线程问题,其中某些线程未正确调度
- 在 C/C++ 中更改 Android 上的本机线程优先级
- 在android ndk中为线程编译c++代码时出现memset错误
- Android上本机线程的可能状态
- 线程中的数学函数返回错误的值,使用android ndk
- 当调用一个单独的android线程时,Emit不工作
- Android NDK线程使用非静态成员函数无效
- Android NDK -多线程正在减慢渲染速度
- 如何使用cmake和Android NDK在C++中加载线程支持
- Android opengl在两个线程上运行的两个上下文之间共享纹理