1.如何让线程停下来:
<1>让自己停下来:
Sleep()函数
void Sleep(
[in] DWORD dwMilliseconds
);//停下多少毫秒
<2>让别人停下来:
SuspendThread()函数:让线程处于阻塞(挂起)不占用CPU
DWORD SuspendThread(
[in] HANDLE hThread //传线程句柄
);
线程恢复:
ResumeThread()函数
DWORD ResumeThread(
[in] HANDLE hThread //传线程句柄
);
下面看看例子
#include"stdafx.h"
#include<stdio.h>
DWORD WINAPI ThreadProc(_In_ LPVOID lpParameter)
{
;
for (int i = 0; i < 100; i++)
{
Sleep(500);
printf("+++++++++%d\n", i);
}
return 0;
}
int main(int argc, char argv[])
{
HANDLE hThread;
hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
Sleep(5000); //停5s
SuspendThread(hThread); //线程挂起
Sleep(5000);
ResumeThread(hThread); //线程恢复
getchar(); //让main函数停到这里方便我们观察线程
CloseHandle(hThread);
return 0;
}
不过需要注意的是一个挂起就需要对应一个恢复,就是说有一个SuspendThread(hThread); 想要恢复的话就要有一个ResumeThread(hThread); 有两个SuspendThread(hThread);恢复的话就要有两个ResumeThread(hThread);如果有两个SuspendThread(hThread);却只有一个
ResumeThread(hThread);线程还会处于挂起状态。如下(我只是在上面的代码中多加了一个SuspendThread())

这篇博客详细介绍了Windows系统下线程控制的几个关键操作,包括如何使用Sleep(), SuspendThread(), ResumeThread()函数来暂停和恢复线程,WaitForSingleObject()和WaitForMultipleObjects()函数等待线程结束,以及如何通过GetExitCodeThread()获取线程执行结果。此外,还讲解了线程上下文的概念,如何利用GetThreadContext()和SetThreadContext()获取和设置线程的寄存器值。"
8635234,1360544,Linux内核中的kmalloc函数详解,"['内存管理', 'Linux内核', '系统调用', '内核编程', '硬件交互']
最低0.47元/天 解锁文章
765

被折叠的 条评论
为什么被折叠?



