Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Chinese
  4. 线程,readyread 信号 槽
Forum Update on Monday, May 27th 2025

线程,readyread 信号 槽

Scheduled Pinned Locked Moved Unsolved Chinese
10 Posts 2 Posters 8.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • YiQinY Offline
    YiQinY Offline
    YiQin
    wrote on last edited by
    #1

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

    FlotisableF 1 Reply Last reply
    0
    • YiQinY YiQin

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

      FlotisableF Offline
      FlotisableF Offline
      Flotisable
      wrote on last edited by
      #2

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

      1 Reply Last reply
      0
      • YiQinY Offline
        YiQinY Offline
        YiQin
        wrote on last edited by
        #3

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

        FlotisableF 1 Reply Last reply
        0
        • YiQinY YiQin

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

          FlotisableF Offline
          FlotisableF Offline
          Flotisable
          wrote on last edited by
          #4

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

          1 Reply Last reply
          0
          • YiQinY Offline
            YiQinY Offline
            YiQin
            wrote on last edited by
            #5

            哦 不要意思;
            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也抓包过 是有数据发送回来的 ,但是就是出发不了信号。。。

            FlotisableF 1 Reply Last reply
            0
            • YiQinY 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也抓包过 是有数据发送回来的 ,但是就是出发不了信号。。。

              FlotisableF Offline
              FlotisableF Offline
              Flotisable
              wrote on last edited by
              #6

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

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

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

              YiQinY 1 Reply Last reply
              0
              • FlotisableF Flotisable

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

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

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

                YiQinY Offline
                YiQinY Offline
                YiQin
                wrote on last edited by
                #7

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

                FlotisableF 1 Reply Last reply
                0
                • YiQinY YiQin

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

                  FlotisableF Offline
                  FlotisableF Offline
                  Flotisable
                  wrote on last edited by
                  #8

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

                  YiQinY 1 Reply Last reply
                  0
                  • FlotisableF Flotisable

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

                    YiQinY Offline
                    YiQinY Offline
                    YiQin
                    wrote on last edited by
                    #9

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

                    FlotisableF 1 Reply Last reply
                    0
                    • YiQinY YiQin

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

                      FlotisableF Offline
                      FlotisableF Offline
                      Flotisable
                      wrote on last edited by
                      #10

                      @YiQin
                      是的

                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved