Не следует использовать QueryPerformanceCounter
для определения времени суток. Он может использоваться только для определения истекшего интервала с очень высоким разрешением, поскольку он возвращает количество тактов, прошедших с момента последней перезагрузки компьютера.
Таким образом, в лучшем случае вы можете только определить, сколько часов, минут и секунд прошло с момента предыдущего чтения QueryPerformanceCounter
, которое не должно было произойти слишком долго в прошлом.
Чтобы преобразовать тики в секунды, вам нужно определить частоту (используя QueryPerformanceFrequency ) тиков на компьютере, на котором вы используете функцию QueryPerformanceCounter
, а затем разделить показания на эту частоту :
// obtain frequency
long freq;
QueryPerformanceFrequency(freq);
// then obtain your first reading
long start_count;
long end_count;
QueryPerformanceCounter(start_count)
// .. do some work
// obatin your second reading
QueryPerformanceCounter(end_count);
// calculate time elapsed
long milliseconds_elapsed = (long)(((double)(end_count - start_count) / freq) * 1000);
// from here on you can format milliseconds_elapsed any way you need to
Альтернативой приведенному выше примеру будет использование структуры TimeSpan , доступной в .Net, в которой есть конструктор, который принимает тики примерно так:
// then obtain your first reading
long start_count;
long end_count;
QueryPerformanceCounter(start_count)
// .. do some work
// obatin your second reading
QueryPerformanceCounter(end_count);
TimeSpan time_elapsed = new TimeSpan(end_count - start_count);
Console.WriteLine("Time Elapsed: " + time_elapsed.ToString());