KeymouseGo icon indicating copy to clipboard operation
KeymouseGo copied to clipboard

执行任务时,会出现概率性出现没有执行任何动作然后直接finished状态

Open bingfengfeifei opened this issue 2 years ago • 0 comments

版本: 5.1 & main分支最新代码构建 复现条件: 录制任意一段键盘输入脚本,然后一直使用快捷键频繁启动,大概5-10次可以出现一次这种情况 原因分析: 在run函数中有一段判断退出的条件

current_status = self.frame.tnumrd.text()
                if current_status in ['broken', 'finished']:
                    self.frame.running = False
                    break

该条件使用了UI层的本文内容作为判断条件,UI层的文本是通过RunScriptClass类利用qt的信号和槽机制更新的,而RunScriptClass类应该是多线程启动,与主线程不在同一线程,根据qt的默认信号的槽的机制,同一线程下emit投递消息和处理消息是同步的,而不同线程之间emit投递消息和处理消息是异步的。该场景下,RunScriptClass应该是异步更新UI层的文本。 所以概率性出现一种情况,就是前一次脚本执行结束,frame.tnumrd.text是finished状态,下次启动时,发送了更新frame.tnumrd.text的异步消息,但是UI层没有来得及处理,就进入了run函数中执行上面代码中的判断,导致异常退出。

我想到的一种解决方法: 似乎可以将frame.tnumrd.text信号和槽绑定修改为同步

self.tnumrdSignal.connect(frame.tnumrd.setText, type=Qt.DirectConnection)

最后感谢各位开发者,这个软件解决了我很多痛点,非常好用~

bingfengfeifei avatar Jan 11 '23 14:01 bingfengfeifei