• 5873阅读
  • 7回复

子线程 run 里创建的类可以传给主线程吗 [复制链接]

上一主题 下一主题
离线l270378034
 

只看楼主 倒序阅读 楼主  发表于: 2011-01-21
关键词: qt线程
  1. #include "fortunethread.h"
  2. #include <QtNetwork>
  3. FortuneThread::FortuneThread(int socketDescriptor, const QString &fortune, QObject *parent)
  4.     : QThread(parent), socketDescriptor(socketDescriptor), text(fortune)
  5. {
  6.     server=(FortuneServer *)parent;
  7. }
  8. void FortuneThread::run()
  9. {
  10.     TcpClientSocket * clientConnection=new TcpClientSocket();
  11.     if (!clientConnection->setSocketDescriptor(socketDescriptor))
  12.     {
  13.         return;
  14.     }
  15.    server->passfd(clientConnection);
  16.    exec();
  17. }


  1. void FortuneServer::incomingConnection(int socketDescriptor)
  2. {//接收客户端连接
  3.     FortuneThread *thread = new FortuneThread(socketDescriptor, "ff", this);//创建线程
  4.     connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
  5.     thread->start();
  6. }
  7. void FortuneServer::passfd(TcpClientSocket *clientConnection)
  8. {
  9.     clientlist.append(clientConnection);
  10.     connect (clientConnection,SIGNAL (updateClients (QString ,int )),this ,SLOT (updateClients (QString ,int )));
  11.     connect (clientConnection ,SIGNAL (disconnectedclinet (int )),this ,SLOT (slotDisconnected (int )));
  12.     QString Iip=clientConnection->peerAddress ().toString();//客户端ip
  13.     qDebug()<<"pass"<<Iip;
  14. }

client  server qt socket.rar (68 K) 下载次数:6
[ 此帖被l270378034在2011-01-21 16:59重新编辑 ]
linux_qt
离线XChinux

只看该作者 1楼 发表于: 2011-01-21
应该可以的吧。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线l270378034

只看该作者 2楼 发表于: 2011-01-21
回 1楼(XChinux) 的帖子
服务器发的数据 客户端能收到 但是客户端发的数据服务端收不到,不知道是什么原因。
不用线程 在incomingConnection(int socketDescriptor) 里创建QTcpSocket没问题的。
linux_qt
离线lejcey

只看该作者 3楼 发表于: 2011-01-21
可以的,但是回调成员函数的时候,线程中的调用widget不能发送事件,所以,不要直接从线程中回调成员函数。
离线XChinux

只看该作者 4楼 发表于: 2011-01-21
不同线程之间用signa/slot通信。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线pjincz
只看该作者 5楼 发表于: 2011-01-25
普通的C++类没有线程归属概念,可以随便撇来撇去。但是要注意并发控制问题。
QObject派生的类,有线程归属概念,撇到另外一个线程前调用一下moveToThread。
QWidget派生的类只能归属于主线程。
离线blackren
只看该作者 6楼 发表于: 2011-01-30
signal/slot使用要小心,不同thread的signal/slot使用會很容易造成程式不穩定
离线l270378034

只看该作者 7楼 发表于: 2011-02-12
谁能帮我
linux_qt
快速回复
限100 字节
 
上一个 下一个