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())