当前位置:编程学习 > wap >>

跨线程调用套接字错误,求老师指导

做的界面有好多窗口需要接收数据和发送数据。怕界面处理卡,所以外定义两个线程,接收数据是一个次线程,发送数据是一个次线程。

我开始想的是将套接字设为全局
主线程建立一个连上服务器的套接字后,接下来次线程调用这个这个套接字进行发送 读取。


可问题来了:
QObject: Cannot create children for a parent that is in a different thread.
         (Parent is QNativeSocketEngine(0x11d9340), parent's thread is QThread(0xf6eb80), current thread is recedataThread(0x1362e40)


也就是不能跨线程调用套接字。我该怎么办呢?



后来,在换另一种思路,不把套接字作为全局变量,在主线程中创建套接字后,把套接字作为参数传给次线程,可是这样,在次线程的run中需要用到套接字,还是会出现这个跨线程调用变量的问题。

//次线程
recedataThread::recedataThread(QTcpSocket *tcpsocket) 
{   
    savetcpsocket = tcpsocket;  //保存传递进来的套接字
}




//接收数据:

void recedataThread::run()
{
    usetcpsocket = new QTcpSocket;

    usetcpsocket = savetcpsocket; //套接字传递


    .......
}


可这样的话,usetcpsocket 还是属于主线程,在这使用,还是次线程调用,出现同样问题,该如何解决呢?? --------------------编程问答-------------------- 大哥,好好看看多线程部分的帮助文档吧。 --------------------编程问答-------------------- 为什么要在主线程创建套接字呢? 你把网络参数传递给次线程,在次线程里创建QTcpSocket不就行了吗? --------------------编程问答--------------------
引用 2 楼 nlstone 的回复:
为什么要在主线程创建套接字呢? 你把网络参数传递给次线程,在次线程里创建QTcpSocket不就行了吗?


因为我有很多个窗口需要给服务器发送数据并且接收。主线程创建后就一次搞定了,其他的线程直接拿来用,不用每次都创建套接字 --------------------编程问答--------------------
引用 1 楼 jerryjjian 的回复:
大哥,好好看看多线程部分的帮助文档吧。


能指出问题么,我再看 --------------------编程问答-------------------- 1 把参数传给子线程来创建,代码上没什么重复的地方。。。
2 用movetothread, 把QXXXScoket对象移到子线程去
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,