使用qmqtt的过程里面本来一切都正常,原来代码是
connect(m_mqClient,SIGNAL(ReciverMessage(QByteArray)),this,SLOT(ReciverMsg(QByteArray)));
此信号为qmqtt收到一个消息就的信号
主界面
通过ReciverMsg(QByteArray)这个槽函数收到消息。然后处理。
但是因为在gui界面想一个个处理消息,不想收到消息就处理,也就是不想多线程处理,所以在ReciverMsg(QByteArray)槽函数里面把收到的消息保存起来,放一个队列里面,在gui界面里面有个死循环
while(true)
{
QByteArrayrebackdata;
if(!m_bIsBusy)
{
if(ww->ReadControlMessage(rebackdata))//保存在队列里面的一个函数,从这个函数里面一个个读取消息
{
m_bIsBusy = true;
WriteFile(rebackdata);
}
else
{
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);//处理其他消息、事件。
}
}
else
{
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);//处理其他消息、事件。
}
这样做后,信号和槽函数都没有办法相应了,这是怎么回事呢?把这个死循环去掉,是可以相应的?有什么解决办法