Я довольно новичок в QT, но использовал многопоточные методы на некоторых других платформах. Я делаю опрос в QThread, который я создаю в основном. Для этого я подклассифицировал его. Мне нужно передать некоторые параметры (QObjects) в поток, чтобы он мог выполнить некоторую работу. Но когда я пытаюсь использовать их, моя программа падает. Итак, мой вопрос в том, как я могу использовать те же QObjects в обоих потоках? Я буду использовать мьютексы для синхронизации, но я не могу избавиться от этой ошибки «Невозможно создать дочерние элементы для родителя, который находится в другом потоке».Как делиться QObjects между потоками в Qt
Существует четыре статических функции, которые работают с объектом QSerialPort.
QSerialPort serial; // this is in MyObject's class definition (instance variable)
void MyQObject::func1(void *objData)
{
MyQObject *obj = static_cast<MyQObject*>(objData);
obj->serial.clear(QSerialPort::Input);
}
int MyQObject::func2(void *objData)
{
MyQObject *obj = static_cast<MyQObject*>(objData);
obj->serial.waitForReadyRead(0);
return obj->serial.bytesAvailable();
}
void MyQObject::func3(ivoid *objData)
{
MyQObject *obj = static_cast<MyQObject*>(objData);
// Read data using serial.read()
}
void MyQObject::func4(void *objData)
{
MyQObject *obj = static_cast<MyQObject*>(objData);
// Read data using serial.write()
}
И в методе запуска MyThread я вызываю функции выше. Это вызывает сбой.
Ошибка:
QObject: Невозможно создать для детей одного из родителей, который находится в другом потоке. (Родитель QSerialPort, поток родителей является QThread, текущий поток OtherThread)
Не может ли это быть проблемой взаимного исключения? – Claudio
Вы должны использовать сигналы и слоты для связи между потоками. Также обратите внимание, что вы не можете создавать элементы GUI из другого потока. –
Вам не разрешено передавать 'QObject' в другой поток, а затем создавать дочерние объекты этого объекта в другом потоке. Это причина вашего последнего сообщения. Что вы пытаетесь выполнить, передав 'QObject' вместо некоторых других данных? – RobbieE