Issue of implementing profiling timer on some defective hardwares using QPF


QueryPerformanceCounterとQueryPerformanceFrequencyを使用してTimerを実現する際には、QPFを使用して計算したものがGetTickCountよりもはるかに大きい可能性があるという問題に注意する必要があります.これはハードウェアの問題による可能性があるので、修正する必要がある可能性があります(または、これらのハードウェアが古いため、修正する必要はありませんか?)
 
関連資料はマイクロソフトの知識ベースで紹介されています.
Performance counter value may unexpectedly leap forward
Ogre OgreTimer       ,    。                     processor    Index
 
 
#if _MSC_VER >= 1400 && defined (_M_X64)
GetProcessAffinityMask(GetCurrentProcess(), (PDWORD_PTR)&procMask, (PDWORD_PTR)&sysMask);
#else
GetProcessAffinityMask(GetCurrentProcess(), &procMask, &sysMask);
#endif
// Find the lowest core that this process uses
if ( mTimerMask == 0 )
{
    // Alex, 2010.4.17
    // here, we can just compute the lowest as follow
    // ~(procMask & (procMask - 1)) & procMask
    // This assumes that procMask is non-zero, which could happen ?
    mTimerMask = 1;
    while ( ( mTimerMask & procMask ) == 0 )
    {
        mTimerMask <<= 1;
    }
}

ここでは、 も いcpu bitを すればよいので、 で べたコードをループせずに することができます.そのコードを してprocMaskが0でないと します.(プロセスの 、そのprocMaskは0である がありますか.0である 、 のcpuで することは されません. がありますか.)