qlist奇葩问题

zhenimei100 2017-08-31 01:21:18
qlist用着用着,length返回-2.
我所有put和take的地方都加了打印。
发现是成对的,即qlist应该是空的。
但是去查询isempty,返回非空,然后打印长度显示-2.简直无语。
有人遇到过吗?
...全文
815 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
donwmufromdying 2017-09-05
  • 打赏
  • 举报
回复
是否封装在一个类里不是重点,关键是,该类的对象是否只有一份.其次是,线程的开始和结束以及属于子线程的资源申请释放等等,都是有讲究的.在做多线程的编码前,最好画出每个线程的工作流程和不同线程之间的交互.如果你觉得QMutex不好用,也可以用std::mutex 甚至就用std::atomic
zhenimei100 2017-08-31
  • 打赏
  • 举报
回复
谢谢你的回答。 我就是这样做的:对数据封装成一个类, 让这个类提供方法来访问数据. 加锁就加在这个类里面。 可惜事与愿违。
大卫无限 2017-08-31
  • 打赏
  • 举报
回复
那就对咯, 多线程冲突或者内存访问出问题了.这种很难排查. 线程的操作本来就比较麻烦,容易出错. 而且Qt加入了新的线程使用方式, 和传统的线程使用方式有区别, 导致使用的时候容易出错. 其实Qt有两种线程处理方式, 大多数情况下不用自己加锁就可以很好的处理好线程的问题, 这种处理方式,就是队列模式的信号和槽. 还有一种就是传统意义上的线程处理方式, 就是一个线程就是一个函数, 数据需要自己去加锁进行保护. 介于多线程的复杂度, 可以使用一些简单的手段屏蔽一些问题. 比如多使用用拷贝, 而不是多个线程访问一个数据, 再比如对数据封装成一个类, 让这个类提供方法来访问数据. 加锁就加在这个类里面, 这样独立数据访问之后, 可以让逻辑更加清晰.
zhenimei100 2017-08-31
  • 打赏
  • 举报
回复
@n7zj0x8,我是多线程方式,多跑一会就出现这问题了。 哎,我感觉qt4好垃圾,我所有资源都加了互斥保护了,还是这不行那不行的,烦死了。
大卫无限 2017-08-31
  • 打赏
  • 举报
回复
你的使用上有问题, QList不会出现这么明显的错误. 你完全可以建立一个空的工程来测试一下QList
  • 打赏
  • 举报
回复
没碰过,用之前可以先调clear()清除一下再往里面放数据

16,216

社区成员

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

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