【发布时间】:2015-03-15 06:42:08
【问题描述】:
在 qt 主线程中我可以成功运行这个:
jbyteArray jBuffer = _env->NewByteArray(bufferSize);
_env 是 QAndroidJniEnvironment。但如果我尝试在QRunnable 的运行函数中使用_env,应用程序崩溃并出现此错误:
Fatal signal 11 (SIGSEGV), code 1
这是代码:
class HelloWorldTask : public QRunnable
{
QAndroidJniEnvironment * _env;
void run()
{
qDebug() << "Hello world from thread" << QThread::currentThread();
jbyteArray jBuffer = (*_env)->NewByteArray(10);
qDebug() << "Hello 2 world from thread" << QThread::currentThread();
}
public:
void setPointer(QAndroidJniEnvironment * p){
_env = p;
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
HelloWorldTask * hello = new HelloWorldTask();
QAndroidJniEnvironment env;
QAndroidJniEnvironment * p = & env;
hello->setPointer(p);
QThreadPool::globalInstance()->start(hello);
return a.exec();
}
您能否告诉我如何在新的 Qthread 中使用指向 QAndroidJniEnvironment 或 QAndroidJniObject 的指针?因此应用程序 ui 在执行 java 进程期间保持响应。
【问题讨论】:
标签: qt qthread qtandroidextras