Как вы приостановите поток?

Здравствуйте, я пытаюсь приостановить поток, но по какой-то причине он продолжает сбивать игру. вот что я получил

void Test(){
    SuspendThread((PVOID)0x83593C24);//0x83593C24 The offset from the game
    Scr_AddInt(1);
    ResumeThread((PVOID)0x83593C24);
}

В основном я пытаюсь сделать паузу, чем вызвать Add Int, чем возобновить его

1 ответ

Вам нужно использовать дескриптор потока, который был возвращен при создании потока. Смотрите документацию для CreateThread; SuspendThread; а также ResumeThread,

В частности, из документации по CreateThread:

Если функция завершается успешно, возвращаемое значение является дескриптором нового потока. Если функция завершается ошибкой, возвращаемое значение равно NULL.

Пример:

HANDLE thread_handle = CreateThread(/*args*/);  // hold on to this value (and check for failure)
if (thread_handle == NULL)
{
    // handle creation error
} 

DWORD suspend_retval = SuspendThread(thread_handle); 
if (suspend_retval == static_cast<DWORD>(-1))
{ 
    // handle suspend error
}

Scr_AddInt(1);  // original work  

DWORD resume_retval = ResumeThread(thread_handle);
if (resume_retval == static_cast<DWORD>(-1))
{ 
    // handle resume error
}

Возможно, стоит создать класс-обертку, который инкапсулирует создание, приостановку, возобновление и завершение потока. Этот класс может выполнять всю внутреннюю проверку ошибок и, при необходимости, генерировать исключение.

Другие вопросы по тегам