QueryPerformanceCounter и безопасность потоков - PullRequest
5 голосов
/ 30 декабря 2008

Я думаю о том, чтобы совершать повторные вызовы (вращение) в QueryPerformanceCounter в двух потоках, которые будут активны одновременно. Я не уверен, что это действительно проблема, поскольку я не видел ничего написанного об этом, но безопасен ли поток QueryPerformanceCounter?

Спасибо

Ответы [ 2 ]

1 голос
/ 30 декабря 2008

Я думаю о повторении звонки QueryPerformanceCounter в двух потоках который будет активен одновременно.

OOG. Подумайте, что вы делаете и сколько процессоров доступно. Если у вас есть один процессор, это не будет работать: они не могут быть «активными одновременно», потому что QueryPerformanceCounter не предоставляет управление от одного потока другому. Я совершенно уверен, что переключение потоков в win32 с одиночными процессорами имеет временную гранулярность порядка 1 мсек.

Если у вас несколько процессоров, вы можете получить блестящие результаты (теоретически - у меня нет многопроцессорного ПК, поэтому я сам этого не наблюдал). Более интересное обсуждение QPC можно найти в Интернете (см., Например, блог Раймонда Чена )

Если вы действительно хотите подождать, чтобы оптимизировать время, я бы посоветовал вам спросить, как лучше всего это сделать на одном из форумов по программированию игр, где есть эксперты по таким вопросам.

1 голос
/ 30 декабря 2008

Это зависит от того, где живет ваш аргумент QueryPerformanceCounter. Если это общая переменная для двух потоков, то это не похоже на то, что функция поточно-безопасна.

Поэтому вместо этого я рекомендую, чтобы каждый поток имел свой собственный LARGE_INTEGER для передачи ваших вызовов в QPC. Каждый вызов не зависит от другого и должен соответствующим образом обновлять LARGE_INTEGER.

В статье MSDN , посвященной этой функции, также указывается на настройку маски сродства k, если вы находитесь в многопроцессорной среде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...