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

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

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

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

-2

Решение

Вам нужно использовать дескриптор потока, который был возвращен при создании потока. Смотрите документацию для 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
}

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

0

Другие решения


По вопросам рекламы [email protected]