У меня есть класс потоков, который отлично работает на рабочем столе, но падает на Android. В моем приложении Qt Мне нужна задача с общим объектом:Qt Android, Как получить доступ к внешнему объекту в QRunnable?
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);
Это работает втирает в рабочем столе. Но в андроиде, как вы знаете, это не работает. когда я запускаю его Fatal signal 11 (SIGSEGV), code 1, fault addr 0x98 in tid 31727 (Thread (pooled))
происходит, и только первый Hello распечатывает перед использованием _p
Так что мой вопрос:
Как использовать MyPointer (общий объект) во всех потоках. Я не могу передать его копию в каждый поток. Он должен быть передан указателем во всех потоках. Другими словами, как использовать общий объект во всех потоках. В методах, которые не являются константами, и каждый из потоков может изменить объект.
Я знаю, что есть несколько методов обработки многоразмерных приложений в Qt. какой из них подходит для работы на устройстве Android?
Нужно ли использовать JNI для безопасного многопоточности в Android? Думаю, да!
Спасибо за ваш ответ. Но я тестировал приложение на рабочем столе, и он отлично работает без Mutex. Проблема - андроид. Мьютекс не устранил проблему. –