如何暂停线程

How do you pause a thread?

本文关键字:线程 暂停 何暂停      更新时间:2023-10-16

你好,我试图暂停一个线程,但由于某种原因,它一直崩溃的游戏。这是我得到的

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

基本上我想暂停然后调用Add Int然后恢复它

您需要使用创建线程时返回的线程句柄。参见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
}
创建一个封装线程创建、挂起、恢复和终止的包装器类可能是值得的。这个类可以在内部执行所有的错误检查,并在适当的时候抛出异常。