求解出现这个现象的原因。
代码如下:
QThread threadA,threadB;
WorkA *wa = new WorkA;
WorkA *wb = new WorkA;
wa->setObjectName("waaaaaaa");
wb->setObjectName("wbbbbbbb");
QByteArray aa("123123123");
qDebug()<<"source add:"<<&aa;
wa->moveToThread(&threadA);
wb->moveToThread(&threadB);
// wb->moveToThread(&threadA);
QObject::connect(wa,&WorkA::sendWork,wb,&WorkA::dowork);
QObject::connect(wb,&WorkA::sendWork,wa,&WorkA::dowork);
QObject::connect(&threadA,&QThread::started,[&wa,&aa](){
wa->dowork(aa);
});
threadA.start();
threadB.start();
WorkA类定义如下:
class WorkA : public QObject
{
Q_OBJECT
public:
signals:
void sendWork(QByteArray data);
public slots:
void dowork(QByteArray data)
{
QThread::msleep(20);
qDebug()<<objectName()<<" data:"<<data<<",Add:"<<&data <<" ThreadId:"<<QThread::currentThreadId();
emit sendWork(data);
}
};
其中对于wb对象的线程操作,如果我使用wb->moveToThread(&threadB);,此时程序一直跑,内存不会增加;程序打印如下:
source add: 0x27f6f8
mainThread: 0x142c
"waaaaaaa" data: "123123123" ,Add: 0x20af720 ThreadId: 0x1e4c
"wbbbbbbb" data: "123123123" ,Add: 0x228bc80 ThreadId: 0x1bc0
"waaaaaaa" data: "123123123" ,Add: 0x20abe40 ThreadId: 0x1e4c
"wbbbbbbb" data: "123123123" ,Add: 0x228bc80 ThreadId: 0x1bc0
"waaaaaaa" data: "123123123" ,Add: 0x20abe40 ThreadId: 0x1e4c
"wbbbbbbb" data: "123123123" ,Add: 0x228bc80 ThreadId: 0x1bc0
"waaaaaaa" data: "123123123" ,Add: 0x20abe40 ThreadId: 0x1e4c
"wbbbbbbb" data: "123123123" ,Add: 0x228bc80 ThreadId: 0x1bc0
"waaaaaaa" data: "123123123" ,Add: 0x20abe40 ThreadId: 0x1e4c
"wbbbbbbb" data: "123123123" ,Add: 0x228bc80 ThreadId: 0x1bc0
...
;如果使用wb->moveToThread(&threadA);,则内存会一直增加;打印数据如下:
source add: 0x2bfa28
mainThread: 0xec
"waaaaaaa" data: "123123123" ,Add: 0x225f570 ThreadId: 0x1174
"wbbbbbbb" data: "123123123" ,Add: 0x225f160 ThreadId: 0x1174
"waaaaaaa" data: "123123123" ,Add: 0x225ed50 ThreadId: 0x1174
"wbbbbbbb" data: "123123123" ,Add: 0x225e940 ThreadId: 0x1174
"waaaaaaa" data: "123123123" ,Add: 0x225e530 ThreadId: 0x1174
"wbbbbbbb" data: "123123123" ,Add: 0x225e120 ThreadId: 0x1174
"waaaaaaa" data: "123123123" ,Add: 0x225dd10 ThreadId: 0x1174
"wbbbbbbb" data: "123123123" ,Add: 0x225d900 ThreadId: 0x1174
"waaaaaaa" data: "123123123" ,Add: 0x225d4f0 ThreadId: 0x1174
"wbbbbbbb" data: "123123123" ,Add: 0x225d0e0 ThreadId: 0x1174
"waaaaaaa" data: "123123123" ,Add: 0x225ccd0 ThreadId: 0x1174
"wbbbbbbb" data: "123123123" ,Add: 0x225c8c0 ThreadId: 0x1174
"waaaaaaa" data: "123123123" ,Add: 0x225c4b0 ThreadId: 0x1174
...