当前位置:编程学习 > wap >>

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

我有几个线程里面需要引用同一个QMutex,防止并发访问。因为设计需要点击停止的时候必须立即terminate这几个线程,但是有可能其中某一个线程停止时正在lock这个mutex,导致下次点击开始的时候所有线程被阻塞。请问如何解决?  --------------------编程问答-------------------- 你在一个线程里lock这个mutex,却想在另外一个线程来释放,嘿嘿。这样好像不行 --------------------编程问答-------------------- 这就是为什么不提倡使用terminate的原因,你应该让线程"自然"的结束 --------------------编程问答--------------------
引用 2 楼 darkdong 的回复:
这就是为什么不提倡使用terminate的原因,你应该让线程"自然"的结束


比如线程内要依次调用几十个方法,如果要让他自然结束,难道每个方法内都去判断条件位以便返回最终退出线程?不太现实啊。 --------------------编程问答-------------------- 这个就是设计的问题了,既然用了多线程,就得想到如何能在最短时间内响应退出的请求。
比如将调用几十个方法放到循环里,每次循环开始判断是否应该退出 --------------------编程问答--------------------
引用 4 楼 darkdong 的回复:
这个就是设计的问题了,既然用了多线程,就得想到如何能在最短时间内响应退出的请求。
比如将调用几十个方法放到循环里,每次循环开始判断是否应该退出


比如我在线程内调用LUA脚本,一个脚本执行完几十分钟过去了。我想点击停止的时候立即停止,这是很现实的需求。 --------------------编程问答-------------------- LUA 脚本引擎应该有控制吧。 --------------------编程问答--------------------
引用 5 楼 hcaihao 的回复:
引用 4 楼 darkdong 的回复:
这个就是设计的问题了,既然用了多线程,就得想到如何能在最短时间内响应退出的请求。
比如将调用几十个方法放到循环里,每次循环开始判断是否应该退出


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


很现实的需求并不代表一定要用terminate哦, terminate可行, 但不适合这种线程再利用的情况~```
应该让线程保持进度是可控的状态, 这样就能实现你的需求, 你可以像Qt的Demos中一样加个volatile bool变量一样来控制线程的运行~· --------------------编程问答-------------------- 你说的是哪个示例,我去看看,不明白为什么qt没有suspend和resume
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,