如何解决:A mutex must be unlocked in the same thread that locked it

hcaihao 2010-07-28 03:53:17
我有几个线程里面需要引用同一个QMutex,防止并发访问。因为设计需要点击停止的时候必须立即terminate这几个线程,但是有可能其中某一个线程停止时正在lock这个mutex,导致下次点击开始的时候所有线程被阻塞。请问如何解决?
...全文
252 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hcaihao 2010-07-30
  • 打赏
  • 举报
回复
你说的是哪个示例,我去看看,不明白为什么qt没有suspend和resume
lefttime 2010-07-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hcaihao 的回复:]

引用 4 楼 darkdong 的回复:
这个就是设计的问题了,既然用了多线程,就得想到如何能在最短时间内响应退出的请求。
比如将调用几十个方法放到循环里,每次循环开始判断是否应该退出


比如我在线程内调用LUA脚本,一个脚本执行完几十分钟过去了。我想点击停止的时候立即停止,这是很现实的需求。
[/Quote]

很现实的需求并不代表一定要用terminate哦, terminate可行, 但不适合这种线程再利用的情况~```
应该让线程保持进度是可控的状态, 这样就能实现你的需求, 你可以像Qt的Demos中一样加个volatile bool变量一样来控制线程的运行~·
dext 2010-07-29
  • 打赏
  • 举报
回复
LUA 脚本引擎应该有控制吧。
hcaihao 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 darkdong 的回复:]
这个就是设计的问题了,既然用了多线程,就得想到如何能在最短时间内响应退出的请求。
比如将调用几十个方法放到循环里,每次循环开始判断是否应该退出
[/Quote]

比如我在线程内调用LUA脚本,一个脚本执行完几十分钟过去了。我想点击停止的时候立即停止,这是很现实的需求。
巴依老爷 2010-07-28
  • 打赏
  • 举报
回复
这个就是设计的问题了,既然用了多线程,就得想到如何能在最短时间内响应退出的请求。
比如将调用几十个方法放到循环里,每次循环开始判断是否应该退出
hcaihao 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 darkdong 的回复:]
这就是为什么不提倡使用terminate的原因,你应该让线程"自然"的结束
[/Quote]

比如线程内要依次调用几十个方法,如果要让他自然结束,难道每个方法内都去判断条件位以便返回最终退出线程?不太现实啊。
巴依老爷 2010-07-28
  • 打赏
  • 举报
回复
这就是为什么不提倡使用terminate的原因,你应该让线程"自然"的结束
tingsking18 2010-07-28
  • 打赏
  • 举报
回复
你在一个线程里lock这个mutex,却想在另外一个线程来释放,嘿嘿。这样好像不行

16,213

社区成员

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

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