线程,readyread 信号 槽



  • 你好,我创建了一个线程 用来socket tcp发送和接收数据 在线程的run中 我先 client = new QTcpSocket(); 然后连接 服务端,可以连的上的,这样客户端和服务端是可以保证连接的上的。然后connect(client, SIGNAL(readyRead()),SLOT(myReadData())); 发送数据给服务端,服务端接收数据返回数据给客户端。客户端显示能够接收到数据,但是 服务端没办法接收到数据,经过查证 好像都没有进入 上面的接收数据的信号对应的槽里面去。请问,是我使用的方式不对?还是有其他原因影响到接收数据?但是我在主线程中做了这个信号和槽是可以接收到数据的。



  • @YiQin
    你要不要提供多一點訊息,像是大致的程式碼,這樣大家可能比較容易看出問題所在



  • 你好 谢谢你的回复,我是想在线程内发送和接收数据,在run里面做了一个while 发送数据 用connect readyRead接收数据,0_1490927118694_upload-9be9b35f-7e4a-4803-a0ba-eb21c09a724b
    这个是线程中的处理,0_1490927544218_upload-cb8ba98d-3ae9-4ee1-89c8-1018bdcfee1b 然后我简简单单的 一个打印 好像都进不了这个槽里面。。



  • @YiQin
    你放的是圖片嗎?看不到喔



  • 哦 不要意思;
    void myEncodeSendThread::run()
    {
    char sendbuff[4096];
    client = new QTcpSocket();
    myClientConnect();
    connect(client, SIGNAL(readyRead()),SLOT(myReadServer()));
    qDebug()<<"This is timerAAAA!!";
    return;
    while(stopped){
    myClientTiffSend(sendbuff);
    }
    }
    这个是线程里面的run的处理,我是想在线程内发送和接收数据,在run里面做了一个while 发送数据 用connect readyRead接收数据;

    void myEncodeSendThread::myReadServer()
    {
    qDebug()<<"This is Read!!";
    }
    这个是信号槽的处理 但是运行的时候 没有触发这个槽,信号与槽的连接的值是true的,说明 信号和槽处理关系建立成功了,我用whirlshark也抓包过 是有数据发送回来的 ,但是就是出发不了信号。。。



  • @YiQin
    我不確定是不是這個問題
    我看了一下文檔

    如果你自己重新定義run()的話,當你從run() return時,這個thread就會結束。你應該是要呼叫exec()來進入 event loop 這個thread才有辦法自己處理資料

    或者你可以看看文檔介紹的方式來使用threadQThread文檔



  • @Flotisable
    好像是可以了 改成
    char sendbuff[4096];
    client = new QTcpSocket();
    myClientConnect();
    connect(client, SIGNAL(readyRead()),SLOT(myReadServer()));
    qDebug()<<"This is timerAAAA!!";
    exec();
    就可以接收数据了 ,但是后面的while()中的发送数据 就没办法处理。。。。



  • @YiQin
    我想你可以另外用 signal&slot 來達到你要效果



  • @Flotisable
    意思就是 我自己在建立自己的signal和slot 然后给一个启动的signal 让线程的exec 里面自己去执行这个轮询的过程么?



  • @YiQin
    是的


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.