请问有没有让步骤组多线程实现waitany模式的方式呢?

使用问题 · 1415 次浏览
blanka 创建于 2024-03-18 14:23

步骤组多线程与多线程循环相比似乎缺少了waitany模式

使用场景:对一个步骤组的运行时间计时,超过设定的时间就终止运行。由于多线程模式跳转动作失效,所以不能用停止模块来实现

blanka 最后更新于 2024/3/18

之乎者也吧 2024-03-19 14:00 :

暂时想到的思路是在这个步骤组的一开始运行一个计时判断的动作且取消勾选等待执行结束,然后在这个计时动作里做判断,超时了就结束那个步骤组所在的动作

blanka 回复 之乎者也吧 2024-03-19 15:47 :

感谢,是个好办法👍

回复内容
之乎者也吧 2024-03-19 21:21
#1

想到一个取巧的方式,在你的这个步骤组的动作的一开始加入一个动作参数的判断,然后在步骤组的一开始改变动作参数来实现一个动作内完成超时停止,具体的请看我刚刚写的超时结束动作,以我的水平这应该是我能实现最好的解决方式了

blanka 回复 之乎者也吧 2024-03-20 01:48 :

试了试感觉还是不太对,因为我希望的终止运行的仅仅是这个步骤组而不是整个动作,我希望可以在这个步骤组内的步骤运行一段时间后,就跳过并继续下一步

blanka 回复 之乎者也吧 2024-03-20 02:13 :

看了下您的思路倒是启发了我,或许可以利用一下传入的动作参数和多线程循环的waitany模式:将计时和步骤作为一个列表的两个项分别传入多线程循环内的动作参数,并设置好waitany,最后用传递错误信息的方式来判断动作是否及时完成

blanka 回复 之乎者也吧 2024-03-20 02:14 :

大概这个样子?https://getquicker.net/Sharedaction?code=945c0dfa-3a2a-4023-24d7-08dc481c770b

但是有个巨大的bug:前面未完成的任务除非手动停止,不然会一直进行下去直到做完


blanka 最后更新于 2024-03-20 02:21
之乎者也吧 回复 blanka 2024-03-20 13:43 :

这个确实是合理的bug,CL大佬更新了个最新版本,不知道能不能解决你的问题,这道题我感觉无解了,因为就算有达到条件的判断,也应该是无法实现在动作里结束另一个步骤组,就试试看新的多线程WaitAny如何吧

blanka 回复 之乎者也吧 2024-03-22 13:28 :
感谢提醒
之乎者也吧 回复 blanka 2024-03-28 17:16 :

https://getquicker.net/Sharedaction?code=074f7f16-7f5e-4bd1-be9b-08dc4ec30b16这是刚刚突发奇想搓出来的,应该能完美适配你的需求了

blanka 回复 之乎者也吧 2024-03-29 10:48 :

感谢,这个结束方式很特别,但我老实说了吧,我想监控的步骤其实是一个运行代码,它并不能很轻易地循环运行……实际上它一遍都运行不完就卡住了😆

之乎者也吧 回复 blanka 2024-03-29 11:13 :

或许我应该丰富一下那个步骤给你展示,那个循环判断只是负责判断是否超时,第一个要执行的步骤本身也是可以多线程的,让这个循环单独独立于你的运行代码步骤去运行,也就是在重复步骤下面再加一个步骤组,把你的运行代码步骤放进去,然后你的代码和这个超时判断就能同时运行

之乎者也吧 回复 blanka 2024-03-29 11:26 :

晚些我再发一个

blanka 回复 之乎者也吧 2024-03-29 11:31 :

这种其实我也有考虑过,但这个结束的仅仅是循环的结束而没法控制循环外面的步骤,反之如果把这个步骤放到循环里,它就会卡住而没法循环了……

CL 2024-03-20 08:18
#2

https://getquicker.net/Help/Versions 1.42.20 增加了waitany模式选项。


注意,waitany结束后,不会自动中止步骤组里尚未结束的任务。 


blanka 回复 CL 2024-03-22 13:26 :

辛苦,非常感谢👏

之乎者也吧 2024-03-29 12:45
#3

因为自己之前在搞循环且不能超时的东西,思路搞错了,现在这个是正确的

执行代码和倒计时同时进行,倒计时的步骤会停止子程序返回到动作中继续执行其他步骤

输出结果是

1

超时了(停止步骤里的消息)

3


之乎者也吧 最后更新于 2024-03-29 12:46
blanka 回复 之乎者也吧 2024-03-30 01:56 :

好像是哎,一开始我以为在多线程里放个停止,根据这个提示会被多线程跳过,但实际测试后发现,停止子程序似乎不受多线程的影响

blanka 回复 之乎者也吧 2024-03-30 01:56 :

感谢,目前这个非常完美了

之乎者也吧 回复 blanka 2024-03-31 10:31 :

不客气,解决了就好哈哈哈哈

回复主贴