Windows API: насколько дорого вызывать функцию API? - PullRequest
2 голосов
/ 04 января 2010

Считается ли вызов функции API дорогой операцией? (при сравнении с вызовом функции, который является частью моего приложения)
Я понимаю, что некоторые функции API вызывают скачок в режиме ядра, но верно ли это для всех из них?

Более конкретно: насколько дорого будет вызывать функцию GetThreadId ?

Ответы [ 3 ]

6 голосов
/ 04 января 2010

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

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

3 голосов
/ 04 января 2010

Это не так для всех из них. Для большинства вызовов API это просто вызов чего-то внутри DLL и не требует перехода в режим. В этом случае это будет от нескольких до десятков наносекунд на звонок.

3 голосов
/ 04 января 2010

Умеренно дешево. Существует переход режима пользователь / ядро, но в ядре это просто чтение из памяти. Разыщите дескриптор, возьмите идентификатор из структуры.

Более конкретно: какие жизнеспособные альтернативы вы видите?

РЕДАКТИРОВАТЬ: если вы ищете текущий идентификатор потока. GetCurrentThreadId () полностью пользовательский режим, поэтому очень и очень дешевый.

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