【问题标题】:Program not showing windows which show processing and timing程序未显示显示处理和计时的窗口
【发布时间】:2016-10-30 05:02:52
【问题描述】:

几周前我运行了我的项目,它向我显示了显示时间和处理速度以及它使用的内存的窗口,但现在我在同一个工具上运行相同的代码,但它没有显示那个屏幕。我在 Visual Studio 2010 和 2015 的两个版本上都尝试了相同的代码,但我得到了那个屏幕。

这里是代码

#ifdef __GNUC__
#include <time.h>
float getticks()
{
    struct timespec ts;

    if (clock_gettime(CLOCK_MONOTONIC, &ts) < 0)
        return -1.0f;

    return ts.tv_sec + 1e-9f*ts.tv_nsec;
}
#else
#include <windows.h>
float getticks()
{
    static double freq = -1.0;
    LARGE_INTEGER lint;

    if (freq < 0.0)
    {
        if (!QueryPerformanceFrequency(&lint))
            return -1.0f;

        freq = lint.QuadPart;
    }

    if (!QueryPerformanceCounter(&lint))
        return -1.0f;

    return (float)(lint.QuadPart / freq);
}
#endif

谢谢

【问题讨论】:

    标签: c++ c visual-studio visual-studio-2010 visual-studio-2015


    【解决方案1】:

    不要像那样投射到floatfloat 只有 4 个字节,无法处理 QuadPart。而是使用unsigned long longlong long

    LARGE_INTEGER freq;
    QueryPerformanceFrequency(&freq);
    
    LARGE_INTEGER t1;
    QueryPerformanceCounter(&t1);
    
    //sleep for about 1 second
    Sleep(1000);
    
    LARGE_INTEGER t2;
    QueryPerformanceCounter(&t2);
    
    long long diff = t2.QuadPart - t1.QuadPart;
    
    //print the result with varying accuracy:
    cout << "seconds: "      << 1          * diff / freq.QuadPart << endl;
    cout << "milliseconds: " << 1000       * diff / freq.QuadPart << endl; 
    cout << "microseconds: " << 1000000    * diff / freq.QuadPart << endl;
    cout << "nanoseconds: "  << 1000000000 * diff / freq.QuadPart << endl;
    

    还有GetTickCount64(它是一个精度约为1毫秒的随机计数器)、GetSystemTimeGetSystemTimeAsFileTime ...取决于您要执行的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 2022-12-23
      相关资源
      最近更新 更多