qtcpsocket类 线程安全吗

输入您需解决的
软件开发问题并开始搜索,
IT异常查询网可以方便地提供各类
程序错误解决方案。
Qt tcp 多线程下QTCPsocket不能发送数据~解决办法 - QT开发
&&&发布于: 21:54:54&&&
Qt tcp 多线程下QTCPsocket不能发送数据~工程文件MainWindow.pro文件~
在实现QTCPsocket的基本功能(连接服务器,(不循环)发送数据)~
但是接受不到数据(有readyread()信号)
添加qt类 &
& mythread类;并且在mainwindow头文件中包含此类的头文件
(类中包含QTCPsocket文件和QTCPsocket & *p_socket指针,和要发生的数据char & sendbuff[])
在mainwindow类中 & 实现线程循环时,实例一个mythread的对象,并对其赋值;
mythread.senbuf & = & mainwindow的数组
mythread.p_sendbuff & = & mainwindow的QTCPsocket & 指针
我企图用上面的代码来传递指针和要发送的数组;
但是代码怎么也发送不过去~~(mythread数组的值已经传递过来,但是指针的值我不敢确定)
还有就是在mainwindow类中的QTCPsocket & 指针读不出来数据(有readyread()信号);
到了现在我实在是无招了~~
所以上来问问,请大仙们给点指导和意见~
还请大仙不灵赐教 &
& (附代码~)
[code=C/C++]
//MAINWINDOW & 头文件
#ifndef & MAINWINDOW_H
#define & MAINWINDOW_H
#include &
&QSettings&
#include &
&QMainWindow&
#include &
#include &
&QtNetwork/QTcpSocket&
#include &
&configdialog.h&
//#include &
&QByteArray&
#include &
&mythread.h&
#include &
&defaultdialog.h&
struct & message_stream{
& unsigned & char &
& protocol_ &
& QByteArray &
& message_ &
& QByteArray &
& message_ &
& QByteArray &
& parameter_ &
& QByteArray &
& parameter_ &
& QByteArray &
& parameter_V &
& //不定长
namespace & Ui & {
class & MainW
class & MainWindow & : & public & QMainWindow
& Q_OBJECT
& explicit & MainWindow(QWidget & *parent & = & 0);
& ~MainWindow();
& QSettings &
相关解决方法
你也许会喜欢
Web前端&&热门解决方法
Web前端&&最新解决方法
Web前端&&随机解决方法
诚心交换友情链接:qq:多线程,QTcpsocket问题!服务器断开时程序崩溃!
[问题点数:40分]
多线程,QTcpsocket问题!服务器断开时程序崩溃!
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
本帖子已过去太久远了,不再提供回复功能。Qt tcp 多线程下QTCPsocket不能发送数据~解决办法(3) - QT开发当前位置:& &&&Qt tcp 多线程下QTCPsocket不能发送数据~解决办法Qt tcp 多线程下QTCPsocket不能发送数据~解决办法(3)&&网友分享于:&&浏览:1294次
& autosendstat & = &
& memset(m_buffer,0,sizeof(m_buffer));
& //connect(,SIGNAL(),this,SLOT());
& connect(p_socketet,SIGNAL(readyRead()),this,SLOT(SockRecvData())); & //有数据来
& connect(p_socketet,SIGNAL(disconnect()),this,SLOT(connectError()));
& connect(p_socketet,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(socketerror()));
& ui-& pushButton_send-& setEnabled(false);
& SocketTCPstart();
MainWindow::~MainWindow()
& delete &
& delete & p_
void & MainWindow::SocketTCPstart()
& p_longfile &
& = & new & QSettings( &ClientConfig.ini &,QSettings::IniFormat,0);
& QString & temp_STR & = & p_longfile-& value( &CLIENT_CONFIG/SERVERIP &).toString();
& temp_I &
& = & p_longfile-& value( &CLIENT_CONFIG/SERVERPORT &).toUInt();
& if(temp_STR.isEmpty()||(temp_I & == & 0))
& ui-& label_dissata-& setText( &错误:client启动失败!可能是配置文件出错! &);
ui-& pushButton_send-& setEnabled(true);
& p_socketet-& connectToHost(temp_STR,temp_I,QIODevice::WriteOnly);
& delete & p_
bool & MainWindow::GenerateCW(char & *buffer)
void & MainWindow::SockSendData(char & *buffer)
& // & GenerateCW(buffer);
& p_socketet-& write(buffer,8);
void & MainWindow::on_pushButton_send_clicked()
& if( & GenerateCW(m_buffer))
& if(mthread.b_threadsata & == & true)
& ui-& pushButton_send-& setText( &发送 &);
& mthread.b_threadsata & = &
& mthread.exit();
& ui-& lineEdit-& clear();
& if(ui-& lineEdit-& text().isEmpty()==false)
& mthread.b_threadsata & = &
& mthread.p_sock & = & p_
& mthread.sendnumber & =ui-& lineEdit-& text().toUInt();
& mthread.p_senddata & =m_
& mthread.start();
& // & mthread.wait();
& // & ui-& pushButton_send-& setText( &停止 &);
& else & if(ui-& lineEdit-& text().isEmpty())
& SockSendData(m_buffer);
void & MainWindow::on_action_socket_close_triggered()
void & MainWindow::on_action_socket_open_triggered()
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有Qt tcp 多线程下QTCPsocket不能发送数据~
[问题点数:100分,结帖人GOKU_B]
Qt tcp 多线程下QTCPsocket不能发送数据~
[问题点数:100分,结帖人GOKU_B]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
2011年8月 移动平台大版内专家分月排行榜第二2011年7月 移动平台大版内专家分月排行榜第二2011年3月 移动平台大版内专家分月排行榜第二
2012年8月 移动平台大版内专家分月排行榜第三2012年7月 移动平台大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。class FileRecvThread : public QThread
explicit FileRecvThread(QObject *parent = 0);
FileRecvThread(quint32, QObject *parent = 0);
~FileRecvThread();
void initSignalSlots();
void setPort(quint32 port);
quint32 getPort();
void dealShackHand(QByteArray *);
void replyExpectShackHand();
protected:
void run();
QTcpServer *pTcpS
QTcpSocket *pTcpS
public slots:
void startTcpServer();
void dealNewConnection();
void dealDatagram();
FileRecvThread::FileRecvThread(quint32 port, QObject *parent) :
QThread(parent)
this-&port =
void FileRecvThread::startTcpServer()
if (!this-&pTcpServer)
this-&pTcpServer = new QTcpS
this-&pTcpServer-&listen(QHostAddress::Any, this-&port);
this-&pTcpServer-&listen(QHostAddress::Any, this-&port);
void FileRecvThread::run()
this-&startTcpServer();
this-&initSignalSlots();
this-&exec();
void FileRecvThread::initSignalSlots()
connect(this-&pTcpServer, SIGNAL(newConnection()), this, SLOT(dealNewConnection()));
void FileRecvThread::dealNewConnection()
this-&pTcpSocket = this-&pTcpServer-&nextPendingConnection();
connect(this-&pTcpSocket, SIGNAL(readyRead()), this, SLOT(dealDatagram()));
void FileRecvThread::dealDatagram()
QByteArray byteArray = this-&pTcpSocket-&readAll();
//这里出现问题
[color=#FF0000]this-&pTcpSocket-&write(QByteArray(&deal&));[/color]
原来写过java所以this用的比较多,大家见谅-。-!把代码裁剪了下,一些不需要贴出来的都删掉了,具体问题如下:在Qt creator下出现QObject: Cannot create children for a parent that is in a different thread.(Parent is QNativeSocketEngine(0xac00878), parent's thread is FileRecvThread(0xac131b8), current thread is QThread(0x3e54c8),意思我明白,就是对象不在同一线程下新建和调用出现的问题,可是QTcpSocket作为FileRecvThread的子对象存在,而且用qDebug打印了下pTcpSocket-&thread()和pTcpServer-&thread()这是一致的,都是0x3e54c8,this-&pTcpSocket-&write(&deal&);也是在FileRecvThread内,按道理说他是属于FileRecvThread线程的,何况先使用了this-&pTcpSocket-&readAll();能读取数据,而this-&pTcpSocket-&write();却不行,这是什么原因,求解。。。。。谢谢大虾了~~~------解决方案--------------------
connect后执行的槽函数并不是在你的run函数所处的线程中执行的每次有信号其实都在主线程中执行,而你的QTcpSocket初始化是在run的线程中不知道是不是这个原因
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有

我要回帖

更多关于 qtcpsocket类 的文章

 

随机推荐