【这个问题真心困扰好几天了】为何在QProcess running状态下没有readyreadout信号?

chen1994_05_20 2015-01-12 08:21:22
很简单的一个C程序while(1){printf(“hello”);sleep(1);}的程序,
尝试1:Qprocess调用 start之后使用readyreadout信号槽读取不断输出的标准输出(readall()),但是接收不到任何信号;
尝试2:Qtimer定时刷新,读到的标准输出也为空;
尝试3:尝试2的基础上 running状态下,直接外部终端kii掉这个进程,还是没有输出;
...全文
523 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
q12123a 2018-05-28
  • 打赏
  • 举报
回复
和楼主的情况类似,加了\n 也没用,但是fflush(stdout)倒是可以了
chen1994_05_20 2015-01-12
  • 打赏
  • 举报
回复
引用 4 楼 foruok 的回复:
[quote=引用 3 楼 chen1994_05_20 的回复:] [quote=引用 1 楼 foruok 的回复:] QProcess的信号是readyRead() while那里,printf添加一个换行符,不然标准输出会缓存。另可以对标准输入调用fflush,试试。
和"\n"没有关系的,因为我的习惯就是使用换行符,看的清楚,发到帖子上只是忘了加"\n" 网上无意中翻到了解决方案 setvbuf(stdout, (char *)NULL, _IONBF, 0); 我的印象中C语言老师也有提到过C的缓存机制,所以我也很纳闷为啥非得加这个才能输出,感觉和我用的是linux系统有关吧。。。。。。[/quote] 标准输出都是有buffer的,要么fflush,要么就是你看到的那种方式去掉buffer。[/quote] 恩 不管怎样,问题总算是解决了,也涨姿势了,感谢。。。。
chen1994_05_20 2015-01-12
  • 打赏
  • 举报
回复
引用 2 楼 n7zj0x8 的回复:
之前有人也在问这个问题.我这里写了一个测试程序,亲测是可用的.我的系统是win8的. http://pan.baidu.com/s/1bnrmv8r
引用 2 楼 n7zj0x8 的回复:
之前有人也在问这个问题.我这里写了一个测试程序,亲测是可用的.我的系统是win8的. http://pan.baidu.com/s/1bnrmv8r
又测试了一下 fflush也是可以的,看来"\n"的清空缓存机制确实有待商榷,涨姿势了。。。。。。
foruok 2015-01-12
  • 打赏
  • 举报
回复
引用 3 楼 chen1994_05_20 的回复:
[quote=引用 1 楼 foruok 的回复:] QProcess的信号是readyRead() while那里,printf添加一个换行符,不然标准输出会缓存。另可以对标准输入调用fflush,试试。
和"\n"没有关系的,因为我的习惯就是使用换行符,看的清楚,发到帖子上只是忘了加"\n" 网上无意中翻到了解决方案 setvbuf(stdout, (char *)NULL, _IONBF, 0); 我的印象中C语言老师也有提到过C的缓存机制,所以我也很纳闷为啥非得加这个才能输出,感觉和我用的是linux系统有关吧。。。。。。[/quote] 标准输出都是有buffer的,要么fflush,要么就是你看到的那种方式去掉buffer。
chen1994_05_20 2015-01-12
  • 打赏
  • 举报
回复
引用 1 楼 foruok 的回复:
QProcess的信号是readyRead() while那里,printf添加一个换行符,不然标准输出会缓存。另可以对标准输入调用fflush,试试。
和"\n"没有关系的,因为我的习惯就是使用换行符,看的清楚,发到帖子上只是忘了加"\n" 网上无意中翻到了解决方案 setvbuf(stdout, (char *)NULL, _IONBF, 0); 我的印象中C语言老师也有提到过C的缓存机制,所以我也很纳闷为啥非得加这个才能输出,感觉和我用的是linux系统有关吧。。。。。。
大卫无限 2015-01-12
  • 打赏
  • 举报
回复
之前有人也在问这个问题.我这里写了一个测试程序,亲测是可用的.我的系统是win8的. http://pan.baidu.com/s/1bnrmv8r
foruok 2015-01-12
  • 打赏
  • 举报
回复
QProcess的信号是readyRead() while那里,printf添加一个换行符,不然标准输出会缓存。另可以对标准输入调用fflush,试试。

16,240

社区成员

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

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