Как лучше написать антиотдачу для игры
Всем привет,я в с++ не силен и по этому у меня куча проблем,буду очень благодарен за помощь.Вопрос большой... Я пишу антиотдачу для игры,то есть если мы зажимает ЛКМ,у нас в игре отдача,и надо чтоб программа гасила эту отдачу,то есть совершала событие перемещение мыши. Изначальный вариант:
#include <Windows.h>
#include <iostream>
#include <winuser.h>
#include <thread>
#include <atomic>
#include <string>
#include <WinGDI.h>
using namespace std;
const string key = "1";
atomic<bool> should_stop = false;
atomic<bool> should_onoff = true;
void ak47();
void switcher()
{
while (true)
{
if (GetAsyncKeyState(0x4D) && should_onoff == false)
{
should_onoff = true;
Sleep(1000);
continue;
}
if (GetAsyncKeyState(0x4D) && should_onoff == true)
{
should_onoff = false;
Sleep(1000);
continue;
}
Sleep(10);
}
}
int main()
{
setlocale(LC_ALL, "Russian");
thread swt(switcher);
swt.detach();
byte n = 1;
while (true)
{
if (GetAsyncKeyState(0x01) & GetAsyncKeyState(0x02) & 0x8000 && should_onoff)
{
if (n == 1)
{
should_stop = false;
thread thr(ak47);
thr.detach();
n = 0;
}
}
else
{
should_stop = true;
n = 1;
}
}
}
И сама функция антиотдачи:
void ak47()
{
Sleep(11);
mouse_event((0x0001), -3, 4, 0, 0);
if (should_stop)
return;
Sleep(11);
mouse_event((0x0001), -3, 4, 0, 0);
if (should_stop)
return;
Sleep(11);
mouse_event((0x0001), -3, 4, 0, 0);
if (should_stop)
return;
Sleep(11);
}
Тут много проблем:
Но тут большая проблема с оптимизацией,т к главный цикл который отлавливает нажатие работает бесконечно быстро и нагружает процессор.Да и способ которым я отлавливаю нажатие мыши не хороший.Задержки делать нельзя ибо макрос должен начинаться моментально с нажатием ЛКМ.Так вот я смотрел в сторону WinApi где есть обработчик событий,но там чтобы событие бралось глобально надо ставить хук,с хуком у меня ничего не вышло(... А текущий вариант не очень красивый.
2.Организовать выход из потока,сейчас у меня стоит флаг should_stop, который если равен 1,то поток завершается.Нужно это для того чтобы если мы отжали ЛКМ антиотдача не работала до конца.Но условие занимает какое то время,а антиотдача переписана с устройства,где нету этой проверки и там не было такого условия.Соответственно задержки между mouse_move немного другие.И надо в лучшем случае чтобы в функции были только фунции Sleep() и mouse_move.Я думал что можно как нибудь функцию антиотдачи запускать в отдельном потоке и когда клавиша переставала быть в зажатом состоянии поток останавливался или убивался.Но не нашел способа "убить" поток
Так вот можно мне как нибудь улучшить программу и избавиться от этих проблем?Буду очень благодарен за помощь.