问一个关于QUdpSocket在线程中使用的问题

zkicker 2011-03-18 10:11:01
我准备在一个线程(Thread)中建立通信对象(CommClass)来发送或接收数据,通信对象跟QT中QUdpSocket 的例子差不多,线程是继承的QThread并重写了run()函数。一开始是在run()函数中定义的CommClass对象,即:

void run()
{
CommClass a;
if(xx)
{
a=new CommClass();
}

while(true)
{
...
}
}

这样定义时接收不到端口来的数据,没有readyRead()信号。但如果将CommClass定义成线程对象的成员变量时就能够收到,通信对象是一样的,为什么在线程里就不行?里面有什么玄机吗?
...全文
581 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zkicker 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yiyaaixuexi 的回复:]
将CommClass定义成线程对象的成员变量时就能够收到,但是把CommClass a放在Run()里面,start调用开始,然后run开启线程,在while里死循环了,你怎么结束这个线程的?quit()么?
不然你在哪里去readyRead()
[/Quote]
嗯,有道理~
念茜 2011-03-25
  • 打赏
  • 举报
回复
将CommClass定义成线程对象的成员变量时就能够收到,但是把CommClass a放在Run()里面,start调用开始,然后run开启线程,在while里死循环了,你怎么结束这个线程的?quit()么?
不然你在哪里去readyRead()
zkicker 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hhxx039 的回复:]
你把CommClass a;放在Run()里面,他的生命周期就只是这个函数,这个函数一执行完,a就自动销毁了,当然没法接收信号了。作为成员变量,生命周期就是整个线程,只要线程不结束,对象就可以一直存在。
[/Quote]
这。。。run()函数就是开启一个线程啊,里面死循环while(true)不会退出的
大熊哥V5 2011-03-23
  • 打赏
  • 举报
回复
你把CommClass a;放在Run()里面,他的生命周期就只是这个函数,这个函数一执行完,a就自动销毁了,当然没法接收信号了。作为成员变量,生命周期就是整个线程,只要线程不结束,对象就可以一直存在。
zkicker 2011-03-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhu_xz 的回复:]
你的代码:
CommClass a;
if(xx)
{
a=new CommClass();
}

这个怎么能new呢?

如果假设没有new的着一块,我怀疑你的代码中的while循环退出了,然后a也就被析构了
[/Quote]

这个if是要用两种方法通信的,可以确定已经被new了,单步的时候while也没有退出
zhu_xz 2011-03-18
  • 打赏
  • 举报
回复
你的代码:
CommClass a;
if(xx)
{
a=new CommClass();
}

这个怎么能new呢?

如果假设没有new的着一块,我怀疑你的代码中的while循环退出了,然后a也就被析构了
zkicker 2011-03-18
  • 打赏
  • 举报
回复
没人知道吗。。。

16,199

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧