毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 移动平台 >> 正文

Qt里创建子线程时,传入this指针出现问题 第2页

更新时间:2013-3-27:  来源:毕业论文
    while(1)
    {

        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"); 毕业论文 

上一页  [1] [2] 

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。