1
zictos 2021-01-12 21:19:07 +08:00
可能是计算误差,或者配置好的电脑有其他程序占用 cpu,可以都分别装一个全新的系统再试试。也可以试试第三方模块,比如 pyautogui 。还可以调用大漠插件
|
2
cool1205 OP @zictos 配置好的电脑只运行这一个程序,相反配置差的电脑上运行了很多娱乐软件。配置好的电脑刚装的。pyautogui 这个比 win32api 慢了太多,已经放弃了
|
6
mxT52CRuqR6o5 2021-01-12 21:26:27 +08:00
两台电脑系统一样吗
|
7
mxT52CRuqR6o5 2021-01-12 21:27:17 +08:00
@mxT52CRuqR6o5 都是 win10 吗?
|
8
cool1205 OP @mxT52CRuqR6o5 都是 win 10,配置差的企业版,配置好的专业版
|
9
thedrwu 2021-01-12 21:31:25 +08:00 via Android
原因太多了。而且这 10ms 级的跟硬件本身的性能已经关系不大了。
如果针对的是特定 app,直接发 wm_command 或者 wm_char 吧 |
10
cool1205 OP 我找到了问题所在了,我在每次执行模拟鼠标操作前,都有段延时,我将延时代码去掉后,配置好的电脑执行 1ms 都不到,相反,配置差的电脑像抽风了一样,时间几毫秒到几十毫秒。虽然不知道是什么原因造成了这样一个情况,但效果非常好
|
11
ysc3839 2021-01-12 22:59:01 +08:00 via Android
你是如何得知函数运行时间的?
|
12
jeeyong 2021-01-13 00:20:21 +08:00
请问配置好的电脑是不是那种多核, 低主频的 cpu. 差的是核心少, 但是主频高于好的机器这种情况?
|
13
AX5N 2021-01-13 00:45:55 +08:00
ahk 不香吗
|
15
cool1205 OP @jeeyong
t4 = int(round(time.time() * 1000)) # time.sleep(0.003) win32api.keybd_event(0x74, 0, 0, 0) t5 = int(round(time.time() * 1000)) win32api.keybd_event(0x74, 0, win32con.KEYEVENTF_KEYUP, 0) t6 = int(round(time.time() * 1000)) |
16
bytesfold 2021-01-13 09:31:56 +08:00
windows 有个时钟周期,导致 time.sleep(0.001)这种操作是无法做到的!这个时间就是 10ms 左右(?),我觉得你这跟这种情况有关
|
17
bytesfold 2021-01-13 09:36:08 +08:00
一个精确到万分之一秒(至少)的定时器(虽然很占用 cpu )
import time import timeit def sleep(sleep_time): target_time = time.perf_counter() + sleep_time while time.perf_counter() < target_time: pass start = timeit.default_timer() sleep(0.001) print("total used {} s.".format(timeit.default_timer() - start)) |
18
cool1205 OP @bytesfold 虽然这个 time.sleep()底层与原理是如何实现我不清楚,我猜也是这个原因,无法实现毫秒级别的延时,以前做嵌入式 arm 、dsp 基本上都是拿时钟频率来算运行时间,可 python 这种高级语言还跟 windows 操作系统有关,我就有点儿不懂了,不过效果能够达到就好了,毕竟这个领域不专业,能拿来用并且 稳定就好了
|
19
matepi 2021-01-13 11:53:57 +08:00
不走 postmessage 么?
只能走 keybd_event ? |