关于QThread中线程循环函数

kgduwu 2021-04-19 05:14:46
QThread的使用方法中
Qt官方人员推荐从QObject继承一个对象A,然后将这个对象A.moveToThread(m_BThread);
然后通过给对象A发送信号来通知BThread执行信号对应的事情,同样BThread处理完数据也通过发送信号来通知主线程一些信息。
如果使用这种方法,我现在的需求是需要在子线程m_BThread中高频次的不断循环接收处理网口的数据,这个不断接收处理网口数据的函数我要在哪里定义,难道我要通过主线程不断的给子线程m_BThread发送接收信号来实现m_BThread中高频次的不断循环接收处理网口的数据的需求吗(这样明显效率低下,而且我也不合理啊)。有什么办法能实现这个需求么?

利用AQObject.moveToThread(m_BThread);来实现多线程,但是我要在m_BThread中进行循环不间断接收和处理网口数据的工作,怎么实现?
...全文
715 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
iperf 2021-05-10
  • 打赏
  • 举报
回复
使用movetothread解决他这个是 一点问题没有哇,
看你的socket是用什么方式的,是采用异步?也就是用的信号槽
读取到网口数据后emit到 你的 一个ProcessA类,这个ProcessA 是要movetothread(m_pThread)移到子线程的,
你所有的处理都是在ProcessA类进行的,主线程,子线程间交互都要用信号槽。


m_pProConnThread = new QThread();
m_pProConnect = new ProcessProConnect();
connect(this,SIGNAL(ConnectProSignal(QString)),m_pProConnect ,SLOT(OnConnectToPro(QString)));
m_pProConnect ->moveToThread(m_pProConnThread );
m_pProConnThread ->start();
emit ConnectProSignal(sting);
源代码大师 2021-05-09
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10794527.html
源代码大师 2021-05-08
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10794527.html
weixin_44201180 2021-05-08
  • 打赏
  • 举报
回复
网口数据从哪采集到的就从哪发送 比如在C写的采集数据 可以在采集到的时候写一个emit senddata(data); 处理数据如果在子线程写的话构造class B : public QObject 主线程A构造里可以写 B *b = new B(); m_BThread = new QThread(); b->moveToThread(m_BThread); connect(c,&C::senddata,b,&B::receivedata); m_BThread->start(); 在子线程里写一个处理函数receivedata就行了
小喻同学i 2021-04-23
  • 打赏
  • 举报
回复
楼上正解, 继承QThread重写run方法, run方法中while(falg){ }循环接收你的数据,当不需要接受,将flag = false;
芒果黑 2021-04-20
  • 打赏
  • 举报
回复
想循环检测那就继承QThread重载run,不是推荐moveToThread就一定要用,用moveToThread也可以,A提供接口开始线程,接口触发一个信号,A内关联一个信号槽,槽函数的内容为线程要执行的内容

16,818

社区成员

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

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