デスクトップでは問題なく動作するスレッド クラスがありますが、Android ではクラッシュします。私の Qt アプリケーションでは、次のような共有オブジェクトを持つタスクが必要です。
class UpdateTask : public QRunnable
{
MyPointer * _p;
void run()
{
qDebug() << "Hello world from thread" << QThread::currentThread();
_p.write();
qDebug() << "Hello3 world from thread" << QThread::currentThread();
}
public:
UpdateTask ();
~UpdateTask ();
void setPointer(MyPointer * pointer){
_p = pointer;
}
};
主に、次のようにタスクを実行できるようにしたいと考えています。
UpdateTask * task = new UpdateTask ();
task->setPointer(_pointer);
QThreadPool::globalInstance()->start(task);
これはデスクトップで完全に機能します。しかし、ご存知かもしれませんが、Androidでは機能しません。実行Fatal signal 11 (SIGSEGV), code 1, fault addr 0x98 in tid 31727 (Thread (pooled))
すると、_p を使用する前に最初の Hello のみが出力されます
。私の質問は次のとおり
です。すべてのスレッドで MyPointer (共有オブジェクト) を使用するにはどうすればよいですか。そのコピーを各スレッドに渡すことはできません。すべてのスレッドでポインターによって渡される必要があります。つまり、すべてのスレッドで共有オブジェクトを使用するにはどうすればよいでしょうか。const ではないメソッドで、各スレッドがオブジェクトを変更する可能性があります。
Qt でマルチスレッド アプリケーションを処理する手法がいくつかあることは知っています。Androidデバイスでの作業に適しているのはどれですか?
Androidで安全なマルチスレッドを行うためにJNIを使用する必要がありますか? 私はそう思います!