一些见解
官方文档介绍

Blocks until new data is available for reading and the readyRead() signal has been emitted, or until msecs milliseconds have passed. If msecs is -1, this function will not time out.
Returns true if new data is available for reading; otherwise returns false (if the operation timed out or if an error occurred).
This function can operate without an event loop. It is useful when writing non-GUI applications and when performing I/O operations in a non-GUI thread.
If called from within a slot connected to the readyRead() signal, readyRead() will not be reemitted.
Reimplement this function to provide a blocking API for a custom device. The default implementation does nothing, and returns false.
Warning: Calling this function from the main (GUI) thread might cause your user interface to freeze.

文档没有直接说明会产生error信号:
在超时的时候会触发error(QAbstractSocket::SocketError)信号(SocketTimeoutError),一不注意可能就会产生一个bug
举例:

//尝试在waitForReadyRead()函数之前有数据过来,当执行wait函数时,会直接返回true。
//在阻塞期间来数据,会返回true。
//阻塞默认参数30000ms,超时返回false。

while (written != data.size())
{
if (mSocket->waitForBytesWritten())
{
written += mSocket->write(data.mid(written, data.size() - written));
}
}

if (port.waitForReadyRead(10)) {port->readAll();}

因为waitfor系列函数是通过readyRead()信号与bytesWritten()信号来实现的,如果产生这两个信号过快(就像上面的代码,死循环执行疯狂产生信号),会导致对应到槽函数的事件(信号到槽的执行是一种事件,这个事件将会到对应线程的消息队列中排队等待执行)一直在消息队列中疯狂阻塞,阻塞的结果就是消息队列不断膨胀,从而内存不断增加,直到队列到达上限导致程序崩溃。
一定要注意超时的问题!

qt中waitForReadyRead和waitForBytesWritten函数的使用相关推荐

  1. qt中 accept()和ignore()函数

    首先来看一段代码: //!!! Qt5 // ---------- custombutton.h ---------- // class CustomButton : public QPushButt ...

  2. qt中sendevent_Qt中postEvent和sendEvent函数

    Qt中postEvent和sendEvent函数 部分内容参考http://blog.csdn.net/lvmengzou/article/details/65450908 qt事件循环需要维护一个事 ...

  3. Qt关于窗口关闭触发函数/信号

    方法一. 窗口右上角的X按键会导致其在不给出任何提示的情况下直接退出, 当点击右上角的x按键时,会触发Qt中的一个事件处理函数:void QWidget::closeEvent ( QCloseEve ...

  4. Qt中的字符编码转换:UTF8、Unicode、GBK、ASCII、16进制字符、16进制数值

    文章目录 前言 简述 ASCII GBK Unicode UTF-8 应用场景 开发环境 编码转换 16进制数值转换为16进制字符 16进制数值转化为字符串 16进制字符串转换为Unicode字符串 ...

  5. QT中鼠标位置获取问题之event-globalPos()与pos()函数

    QT中鼠标位置获取问题之event->globalPos()与pos()函数 标签: Qt 2015-01-03 19:41 820人阅读 评论(0) 收藏 举报 分类: Qt 版权声明:本文为 ...

  6. Qt中Ui名字空间以及setupUi函数的原理和实现

    Qt中Ui名字空间以及setupUi函数的原理和实现 分类: Qt GUI 2012-03-08 15:38 10514人阅读 评论(4) 收藏 举报 uiqtsignalclassdelete 用最 ...

  7. Qt|C++工作笔记-对虚函数的进一步认识(关键是Qt中如何正确使用,达到想要的效果)

    关于虚函数的简单例子 首先是一个很简单例子,刚学C++的朋友都能理解 源码如下: #include <cstdio> #include <windows.h>static in ...

  8. 中的枚举属性函数_软件特攻队|Qt中的反射机制之Q_PROPERTY

    接触过Java的同学肯定知道"反射"这一神器,而所谓的反射,指的是对于任意的一个类,即使在运行状态下,都能知道这个类的所有方法和属性,并可以动态调用这些方法的一种机制. 但是非常遗 ...

  9. QTimer计时速度不断加快问题和QT中show函数失效问题的思考和处理

    使用QT所遇问题之QTimer和show 一. QTimer计时速度不断加快问题 1. 问题的发现 2.问题解决的思路 (1)梳理整个功能实现的逻辑 (2)监控进入定时器中断的次数 (3)跟踪参数lo ...

最新文章

  1. 记录Mask RCNN调整预测网格 font大小
  2. shujufenxi : baichi xiangzhuanqian
  3. 中国人口较少民族作家研讨会
  4. en55032最新标准下载_大型设备塔吊安装维保、安全检查及案例,94页PPT下载!
  5. 微软再出手!这次要干翻 IDEA 了。。
  6. 水文特点是什么意思_自动气象站应建在什么地方?
  7. 三类测量血压原理 - 智能手环测血压原理详解
  8. 彩色图像 psnr matlab,psnr rgb matlab程序
  9. java jvm参数获取_在java代码中获取JVM参数
  10. [转载]github在线更改mysql表结构工具gh-ost
  11. 在FPGA上完美复刻Windows 95
  12. 毕设设计要点整理(一)——角色相关
  13. Java实现文件搜索
  14. 生成SQLite的db文件
  15. Android Framework实战开发-binder通信常见(oneway,in,out,inout)元素介绍及binder双向通信的实现
  16. unrar file.rar 解压rar 问题,找不到unrar 命令。安装rar unrar流程及bug处理
  17. python显示文件夹图片_python遍列目录搜索文件夹及子文件夹图片文件
  18. 学习指针后对int main(int argc, char *argv[]),“()“内部参数的详解(初学者不要怕,浅浅学过指针的就可以看懂)
  19. 源发行版17需要目标发行版17
  20. mPEG-OPSS MPEG-SPDP 甲氧基PEG巯基吡啶

热门文章

  1. 科视Christie 收购美国 Brass Roots Technologies 公司的资产
  2. Jersey框架:文件上传下载
  3. 灵犀互娱 | 2021 校招笔试
  4. Nowcoder专项练习:Linux(四)
  5. wiki程序php,开源WIKI引擎程序Dokuwiki
  6. 标量、向量、矩阵、张量之间的区别和联系
  7. 如何将图片的宽度改为800?图片的尺寸怎么修改?
  8. Linux下安装ns2
  9. NS2仿真:使用NS仿真软件模拟简单网络模型
  10. 对数几率回归原理和代码实现--机器学习