memset(msg_buf_recv.str,0,sizeof(msg_buf_recv.str));
len = recv(sock_cli_fd,&msg_buf_recv,sizeof(msg_buf_recv),0);
if(len < 0)
{
//QMessageBox::about(mythis,"error","recv error"); //该处运行弹窗
qDebug("*******recv error"); //会卡死,所以换成qdebug
break;
}
else if(len == 0)
{
qDebug("*****ser error quit");
break;
}
mythis->ui->send->setEnabled(false);
mythis->ui->startconnect->setEnabled(true);
mythis->ui->disconnect->setEnabled(false);
break;
}
QString recv_str = QString::fromLocal8Bit(msg_buf_recv.str);
mythis->ui->display_text->append(recv_str); //此处用的是QTextBrowser控件,运行后
} //无法正常显示
pthread_exit((void*)0);
}
很奇怪的是,mythis指针在使用的时候,有些地方不会出问题,比如mythis->ui->send->setEnabled(false);
但是有些例如QMessageBox,还有后面的QTextBrowser都会令程序异常退出或者卡死.
我也在网上查过,Qt里一般是使用QThread线程类的派生类来处理多线程任务,但是小弟初学,知道这种传入this,设置为友元函数的方法也可行,只是问题多多。希望各位给出提示。。。。
QT里面最重要的信号槽机制应该看一下,它有两种连接方式,一是直接连接,二是队列连接,你想立即显示在UI界面上,可以使用第一种信号槽连接方式就可以。当线程接收到数据后,发送信号,执行槽函数。
QMessageBox::about(mythis,"error","recv error"); //该处运行弹窗
这句QMessageBox不要传界面指针,改为NULL试试吧!
QMessageBox::about(NULL,"error","recv error"); 毕业论文