C++ Windows上的受控CPU压力

C++ Windows上的受控CPU压力,c++,windows,multithreading,winapi,cpu-usage,C++,Windows,Multithreading,Winapi,Cpu Usage,我试图为一些性能测试引入受控CPU压力 目前使用以下程序诱发应力 //Thread function to create 50% stress on one of the cores unsigned __stdcall threadFunc(void *param) { while(1) { //Start timer //------ Operations----- //------ Operations-----

我试图为一些性能测试引入受控CPU压力

目前使用以下程序诱发应力

  //Thread function to create 50% stress on one of the cores
unsigned __stdcall threadFunc(void *param)
{
    while(1)
    {
        //Start timer   
        //------ Operations-----
        //------ Operations-----
        //Get Elapsed time in ms
        Sleep(elapsedTime);     
    }
    _endthread();
}

MainFunc()
{
   //loop looking for input
if(inputDetectedToIncreaseStress)
   _beginthreadex(NULL, 0, &threadFunc, NULL, 0, &threadId); //Creates a thread

}
使用上面的代码,我希望在特定的内核上产生50%的CPU压力。 例如,在四核系统中,我预期上述代码会产生12.5%的负载,但实际上是25%的负载,在我的例子中,有8个核,它会产生12.5%的负载,预期为6.25%,并且在没有任何睡眠功能的情况下也会产生相同的负载

总之,通过创建没有任何睡眠的线程,我可以得到CPU负载百分比12.5,25,37.5,50,62.5,75,87.5100,但即使引入睡眠函数试图在特定的内核上产生50%的CPU负载,也不能产生像95这样的压力百分比

有人能告诉我哪里出了问题吗

操作系统:Microsoft Windows Server 2012。 CPU核心数:8 程序设计语言:C++
计时器功能:使用查询性能计数器-

不检查调试器中“elapsedTime”的值是一个问题。假设此方案的“操作”花费了合理的时间,比如500毫秒以上,那么为什么不打印出“elapsedTime”或将其显示在状态栏窗格或其他可视组件中?另外,不确定您计划如何将此函数固定到核心?当它从Sleep()返回时,它可能会在任何内核上弹出。我确实检查了运行时间的值,它大约是20毫秒。是的,它可以在任何内核上出现,但我的问题是,我只尝试了一个线程,但我仍然无法在任何内核上使用Sleep实现50%的使用率,它在特定内核上总是100%。换句话说,如何强调8核cpu的负载为6.25%或更少。20ms可能会被舍入为0,因为它与睡眠的粒度有关()。线程正在调用Sleep(),内核刚刚返回,因此线程使用整个内核。尝试200毫秒的任务。