Если поток не имеет маски привязки к процессору, планировщик будет перемещать его из процессора в процессор, чтобы дать ему время выполнения. Поскольку перемещение потока между процессорами снижает производительность, он попытается не перемещать его, но предоставление процессору, на котором будет выполняться, имеет приоритет над тем, чтобы не перемещать его. Итак, обычно потоки движутся.
Что касается таймера apis. timeGetTime предназначен для синхронизации мультимедиа, поэтому он немного точнее, чем GetTickCount
.
QueryPerformanceCounter().
все еще является вашим самым точным измерением. У Microsoft есть это, чтобы сказать об этом.
На многопроцессорном компьютере не должно иметь значения, какой процессор называется. Однако вы можете получить разные результаты на разных процессорах из-за ошибок в базовой системе ввода / вывода (BIOS) или на уровне аппаратной абстракции (HAL). Чтобы указать привязку процессора к потоку, используйте функцию SetThreadAffinityMask.
Поэтому, если вы проводите временные тесты на определенном компьютере, вам, возможно, не придется беспокоиться о том, что QPC пойдет в обратном направлении, вам следует провести некоторое тестирование и посмотреть, имеет ли это значение на вашей машине.