我将暂停(或暂停)除一个线程之外的进程。
我尝试使用SuspendThread(Api函数),结果是进程线程变为不负责任的状态。
这不是我想要的。我想让简历成为一个我必须做大工作的主题。
我该如何解决这个问题?请提出你的想法。
感谢。
答案 0 :(得分:4)
您可以调用CreateToolhelp32Snapshot
来获取属于某个进程的线程列表。一旦你有了这个列表,只需迭代它并暂停每个与当前线程ID不匹配的线程。以下示例未经测试,但应该可以正常工作。
#include <windows.h>
#include <tlhelp32.h>
// Pass 0 as the targetProcessId to suspend threads in the current process
void DoSuspendThread(DWORD targetProcessId, DWORD targetThreadId)
{
HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (h != INVALID_HANDLE_VALUE)
{
THREADENTRY32 te;
te.dwSize = sizeof(te);
if (Thread32First(h, &te))
{
do
{
if (te.dwSize >= FIELD_OFFSET(THREADENTRY32, th32OwnerProcessID) + sizeof(te.th32OwnerProcessID))
{
// Suspend all threads EXCEPT the one we want to keep running
if(te.th32ThreadID != targetThreadId && te.th32OwnerProcessID == targetProcessId)
{
HANDLE thread = ::OpenThread(THREAD_ALL_ACCESS, FALSE, te.th32ThreadID);
if(thread != NULL)
{
SuspendThread(thread);
CloseHandle(thread);
}
}
}
te.dwSize = sizeof(te);
} while (Thread32Next(h, &te));
}
CloseHandle(h);
}
}
答案 1 :(得分:0)
据我所知,你不能暂停一个进程,除了一个线程...因为当进程退出所有线程时也会退出。如果你想要而不是一个线程,你可以产生一个子进程并使用它..