提问人:Davide_24 提问时间:11/4/2023 更新时间:11/4/2023 访问量:55
Autoclicker 速度不准确导致奇怪的测试结果?
Autoclicker speed inaccuracies result in weird test results?
问:
在编写我自己的自动答题器时,我注意到点击速度极不准确。当我尝试都不起作用时,我下载了更多的自动答题器。我看到我测试的每个自动答题器都有非常不准确的 CPS 输出,包括我的。当 CPS 输入增加时,不准确性会以一种奇怪的方式扩展。
我通过使用不同的点击速度测试仪确认了我的点击速度测试仪正常工作。我还尝试了两种不同的睡眠方式:CreateWritableTimer(图 1);睡眠(图2)。 以下是我的测试结果:(图中的颠簸是由于不准确造成的)
这是我的 Autoclicker 线程:
std::atomic<bool> AutoClicker::AutoClickerActive;
void AutoClicker::AutoClickThread(int Speed, bool CPS) // Speed is either the intervall in ms or the clicks per second, depending on the CPS bool
{
long long SleepTime_ns;
if (CPS == true)
SleepTime_ns = (1.0 / Speed) * 1000; // Variable name incorrect because I changed it to ms for the Sleep() demonstration
else
SleepTime_ns = Speed;
INPUT Inputs[2];
ZeroMemory(&Inputs, sizeof(INPUT));
Inputs[0].type = INPUT_MOUSE;
Inputs[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
Inputs[0].mi.time = 0;
Inputs[1].type = INPUT_MOUSE;
Inputs[1].mi.dwFlags = MOUSEEVENTF_LEFTUP;
Inputs[1].mi.time = 0;
while (AutoClickerActive.load() == true)
{
// Get current cursor position
//POINT cursorPos;
//GetCursorPos(&cursorPos);
//Inputs[0].mi.dx = cursorPos.x;
//Inputs[0].mi.dy = cursorPos.y;
SendInput(2, Inputs, sizeof(INPUT));
Sleep(SleepTime_ns); // Not used normally
//Utils::nanosleep(SleepTime_ns); // Used normally
}
}
Utils::nanosleep() 函数:
BOOLEAN Utils::nanosleep(LONGLONG ns)
{
HANDLE timer;
LARGE_INTEGER li; /* Time defintion */
if (!(timer = CreateWaitableTimer(NULL, TRUE, NULL)))
return FALSE;
/* Set timer properties */
li.QuadPart = -ns;
if (!SetWaitableTimer(timer, &li, 0, NULL, NULL, FALSE)) {
CloseHandle(timer);
return FALSE;
}
WaitForSingleObject(timer, INFINITE);
CloseHandle(timer);
return TRUE;
}
我的问题是:如何计算达到所需测量值所需的“输入CPS”?CreateWritableTimer() 输出图看起来更一致,更像一个数学函数。
答: 暂无答案
评论
sleep
Sleep
通常具有相当粗略的分辨率,并且该进程在给定的时间段后“在某个时间点,由操作系统自行决定”唤醒。我认为,如果你看一下每次点击的毫秒数而不是每秒点击数,你可能会得到更好的图表。(我认为另一个渐近收敛到 ~16 毫秒加上信号和等待开销。