-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: 修复密集输入时,实际执行时间比期望值略长的问题 #2
Conversation
我没看具体错误,如果在commit wait的时候加上当前timestamp会怎么样? |
我觉得不行。主要是 maatouch 这边执行其它操作也是有时延的(例如 move、up、down等),但是 MAA 那边默认是理想状况无操作时延的 |
parse本身的delay应该是可以忽略的吧,或者我把我这里编译的发给你看看还会不会有问题? |
想了想,你这样的实现还会有一个问题,比如:
这样的指令理应是合法的,但是有了sync timestamp之后,就只有第一次wait能够生效,后续的wait都会不再起效 |
parse的delay可能影响不大,但是controller那边的delay好像影响挺大的( |
是的,所以我现在修了:fix: timestamp 在 ControlThread 处理信号的时候才同步 我自己觉得第二种更好一点,因为这么写不用改 MAA 那边的代码.jpg |
4a7dd2f
to
0feb3e2
Compare
16bbbd3 |
你这样应该相当于只解决了wait操作的延时,没解决up/down/move的延时吧 |
主要是MAA的需求是:
这样的操作期望延时应该是 400ms,而不是 400ms + move_system_delay * 200 |
要不把 ci 合进去( |
没有啊,因为input和controller是两个线程,wait这样改了之后可以保证wait完的时刻是相对输入时刻对齐的,也就是wait前指令的延迟都会被包含在内,最终多出来的就只会有最后一条指令的额外延时 |
而且现在MaaCore也是每条指令后都会commit,也就是
这样的 |
|
话说你改过的版本试过了么?现在Maa dev分支的我怎么彻底划不了屏了? |
|
想了一下,其实最好的解决方案是用Maf那边的方法,每次move都commit,然后core这边用sleep做延时,这样延时就基本不会错特别多了 |
0feb3e2
to
f39e846
Compare
MAA 现在就是这样的吧(? |
不,我的意思是
这样基本可以保证延时差别不会太大 |
奥,你的意思是完全不调用 maatouch 的 wait |
对,主要maatouch和minitouch的wait实现是不一样的,maatouch是用队列交到controller来sleep,而minitouch是收到wait直接在主线程里sleep,我怀疑这就是minitouchcontroller里先commit再wait的原因 |
我新写的thriftcontroller和playtools都是这么实现的 |
您要不先测测现在的( |
我现在的测着没遇到啥问题 |
主要我也没遇到过那个bug,也不知道怎么复现,现在在想三种解决方法哪个更好一点 |
引入一个理想当前时间 `expectedNow`, 表示执行 `waitEvent(milis)` 时应该等待至 `expectedNow + milis` 而不是 `now + milis`
f39e846
to
c3d493a
Compare
这个还合不合了( |
引入一个理想当前时间
expectedNow
, 表示执行waitEvent(milis)
时应该等待至expectedNow + milis
而不是now + milis