我在QT方面比较新,但在其他一些平台上使用了多线程方法。我正在使用我在main中创建的QThread进行轮询。为此,我将其子类化。我需要将一些参数(QObjects)传递给线程,以便它做一些工作。但是当我尝试使用它们时,我的程序崩溃了。所以我的问题是如何在两个线程中使用相同的QObjects?我将使用互斥锁进行同步,但我无法摆脱这个错误“无法为不同线程中的父级创建子级。”
有四个静态函数可以在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的run方法中,我调用了上面的函数..这会导致崩溃。
错误:
QObject:无法为不同线程中的父级创建子级。 (Parent是QSerialPort,父级的线程是QThread,当前线程是OtherThread)
答案 0 :(得分:0)
很有可能在obj->serial.waitForReadyRead(0);
中创建一个QObject(例如QTimer),它将QSerialPort作为父级。这可能会导致问题。所以解决方案可能是找到一种在线程中创建QSerialPort对象的方法。