门户
书籍
教程
论坛
问答
下载
签到
个人空间
帐号
自动登录
找回密码
密码
登录
立即注册
账号
自动登录
找回密码
密码
登录
立即注册
请绘制轨迹完成人机验证
由vaptcha提供技术支持
登录
注册
搜索
搜索
搜索
热搜
qml
quick
串口
输入中文
数据库
arm
百度地图
qt聊天
QT安装
安装
多窗口
中文乱码
聊天
局域网
鼠标
QT
图片
乱码
rs485通讯
多线程
android
多文档编辑器
本版
用户
本版
用户
【HUX】问题互助平台
博客
动态
好友
帖子
收藏
道具
勋章
任务
淘帖
动态
日志
相册
分享
记录
留言板
群组
门户
导读
排行榜
设置
我的收藏
退出
Qt开源社区
›
精华区(请在“有问必答”发帖)
›
有问必答
›
网络通信
›
多线程 tcpSocket 无法发送数据
发布主题
返回列表
多线程 tcpSocket 无法发送数据
2
回复
9718
查看
[复制链接]
wodeerzisbguo
当前离线
积分
28
wodeerzisbguo
累计签到:2 天
连续签到:1 天
来源:
2016-12-22 17:26:18
显示全部楼层
|
阅读模式
5
Qter豆
写了个服务器端程序,需要在线程中发送数据,我在线程的.h文件中定义了一个
QTcpSocket
* tcpServerConnection,然后在
run
里面实例化。
用这个tcpServerConnection在run 调用
tcpServerConnection
->
setSocketDescriptor
(
socketDescriptor
)
紧接着
QByteArray
data
=
"test"
;
tcpServerConnection
->
write
(
data
);
这个数据是可以被发送出去的。
然后我在线程中定义了一个槽函数,在槽函数里再次使用tcpServerConnection来发送数据,就无法发送出去了。
提示信心:
QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread
我的tcpServerConnection并没有跨线程调用,因为其定义和实例化都是在线程下完成,因该不存在跨线程调用的问题。
所以请教下大家,这个是么原因造成的。
最佳答案
最后的南斯拉夫
查看完整内容
我来告诉你为什么你跨线程了! 首先你的你的主线程里面定义的你的tcpserver线程,而你的函数是属于你的这个线程的,而你的线程又是主线程定义的。所以你的槽函数的执行是在主线程里面执行的。而你的槽函数却操作了一个由你子线程实例化的指针,这个当然是跨现场操作。 你多想想就这个一定是跨线程。。。 ...
相关帖子
关于Qt多线程的一些问题
如何利用读写锁的dll库对SQLite加读锁
KS13-02 多线程应用中如何与主界面通信
回复
使用道具
举报
最后的南斯拉夫
当前离线
积分
15
最后的南斯拉夫
累计签到:1 天
连续签到:1 天
2016-12-22 17:26:19
显示全部楼层
我来告诉你为什么你跨线程了!
首先你的你的主线程里面定义的你的tcpserver线程,而你的函数是属于你的这个线程的,而你的线程又是主线程定义的。所以你的槽函数的执行是在主线程里面执行的。而你的槽函数却操作了一个由你子线程实例化的指针,这个当然是跨现场操作。
你多想想就这个一定是跨线程。。。
回复
使用道具
举报
dearcc
当前离线
积分
131
dearcc
累计签到:25 天
连续签到:1 天
2017-1-18 13:45:22
显示全部楼层
线程中只有run函数的内容是不在主线程的,线程对象本身是在主线程的,所以你的槽函数在主线程,执行在run线程,肯定跨线程了。你可以在线程类构造函数和run函数中输出线程id看看。
回复
使用道具
举报
返回列表
发表新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满)
我知道了