Как остановить поток?

95
04 марта 2022, 16:10

Как сделать чтоб поток переставал выполняться когда ЛКМ перестает быть зажата? Есть такой код:

void spray()
{
mouse_event((0x0001), 1, 4, 0, 0);
Sleep(100);
mouse_event((0x0001), 1, 4, 0, 0);
Sleep(100);
mouse_event((0x0001), 1, 4, 0, 0);
Sleep(100);
mouse_event((0x0001), 0, 3, 0, 0);
Sleep(100);
mouse_event((0x0001), 0, 3, 0, 0);
Sleep(100);
}

Он должен выполняться когда зажата лкм,и что самое важное,если мы отпустили ЛКМ он должен перестать выполняться,т е прерваться на одной из mouse_move. Если это можно как то реализовать без потоков,то тоже вариант неплох. Я пишу так:

byte n=1;
while (true)
{
    if(GetAsyncKeyState(0x01) & 0x8000)
    {
        if (n == 1)
        {
            n = 0;
            thread thr(ak47);
            thr.detach();
        }
    }
    else 
    {
 //Было бы круто тут остановить поток thr
        n = 1;
    }
}

Но проблема в том ,что код выполняется полностью,даже когда кнопка не нажата. Буду очень благодарен за помощь!

Answer 1

Я пишу так:

Не надо. Пишите так: https://ru.stackoverflow.com/a/963930/240512

Что касается остановки потока, проще всего это сделать какой-нибудь атомарной переменной-флагом:

std::atomic<bool> should_stop=false;
void spray()
{
    mouse_event((0x0001), 1, 4, 0, 0);
    Sleep(100);    
    if(should_stop) return;
    mouse_event((0x0001), 1, 4, 0, 0);
    Sleep(100);
    if(should_stop) return;
    //...    
}
//...
should_stop = true; //остановить поток
READ ALSO
Есть ли альтернатива for?

Есть ли альтернатива for?

Мне нужно вывести максимальное число из динамического массива, а как это сделать я понятия не имеюЦикл for не удобен

103
Как сделать бесконечное нажатие лкм

Как сделать бесконечное нажатие лкм

Нужно нажать на лкм в той позиции в которой она находится

91
Заполнение свободного места в строке до конца строки

Заполнение свободного места в строке до конца строки

Уже задавал сегодня похожий вопросПроблему решили

93
Как перевести %20%... в utf8 на русском?

Как перевести %20%... в utf8 на русском?

Ссылка на php скриптСкрипт нормально получает параметры version и name, но text не получается, он становится таким:

84