小编Ell*_*ioh的帖子

QueryPerformanceCounter和溢出

我正在使用QueryPerformanceCounter在我的应用程序中进行一些计时.但是,运行几天后应用程序似乎停止正常运行.如果我只是重启应用程序,它会再次开始工作.这让我相信我的计时码有溢出问题.

// Author: Ryan M. Geiss
// http://www.geisswerks.com/ryan/FAQS/timing.html
class timer
{
public:
    timer()
    {
        QueryPerformanceFrequency(&freq_);
        QueryPerformanceCounter(&time_);
    }

    void tick(double interval)
    {       
        LARGE_INTEGER t;
        QueryPerformanceCounter(&t);

        if (time_.QuadPart != 0)
        {
            int ticks_to_wait = static_cast<int>(static_cast<double>(freq_.QuadPart) * interval);
            int done = 0;
            do
            {
                QueryPerformanceCounter(&t);

                int ticks_passed = static_cast<int>(static_cast<__int64>(t.QuadPart) - static_cast<__int64>(time_.QuadPart));
                int ticks_left = ticks_to_wait - ticks_passed;

                if (t.QuadPart < time_.QuadPart)    // time wrap
                    done = 1;
                if (ticks_passed >= ticks_to_wait)
                    done = 1;

                if (!done)
                {
                    // if > 0.002s left, do …
Run Code Online (Sandbox Code Playgroud)

c++ winapi deterministic timing

5
推荐指数
3
解决办法
6948
查看次数

标签 统计

c++ ×1

deterministic ×1

timing ×1

winapi ×1