从外部控制线程的性能问题
先举个例子
void func(void* data)//线程函数
{
float sum = 0;
while(true)
{
sum = sum + 1;
Sleep(1);
}
}
int main()
{
HANDLE hThread = (HANDLE)::_beginthread(func, NULL, NULL);
while(true)
{
Sleep(1);
}
::TerminateThread(hThread, 0);
::CloseHandle(hThread);
return 0;
}
这个例子是主线程启动了副线程后,一直让副线程跑,由于两个死循环里面都加了Sleep(1),所以这时的CPU占用为0%。
但是我希望副线程里面不出现Sleep(),副线程里面就一死循环,由主线程掌握其运行时间,修改如下。
void func(void* data)
{
float sum = 0;
while(true)
{
sum = sum + 1;
//Sleep(1);
}
}
int main()
{
HANDLE hThread = (HANDLE)::_beginthread(func, NULL, NULL);
::SuspendThread(hThread);
while(true)
{
::ResumeThread(hThread);
Sleep(1);
::SuspendThread(hThread);
Sleep(1);
}
::TerminateThread(hThread, 0);
::CloseHandle(hThread);
return 0;
}
现在的副线程里面的循环是什么都不管一直在跑,然后主线程负责暂停和恢复,但是这样出来的CPU占用是50%,请问这是为什么呢?我该如何实现线程的恢复暂停才能让CPU降到0%呢?