Когда возвращается EnumDisplayMonitor? - PullRequest
1 голос
/ 25 февраля 2011

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

например

 BOOL CALLBACK MonitorEnumProc(
      __in  HMONITOR hMonitor,
      __in  HDC hdcMonitor,
      __in  LPRECT lprcMonitor,
      __in  LPARAM dwData)
{
   // Alter something here - e.g. Add lprcMonitor to a list.    
}

int main()
{
    EnumDisplayMonitor(NULL, NULL, MonitorEnumProc, 0);

    // Can I rely on EnumDisplayMonitor to have finished making calls to
    // MonitorEnumProc at this point?
}

Я проверил запись MSDN, и это не помогает в этом отношении, и я подтвердил бы экспериментом, ноУ меня недостаточно мониторов для надежного тестирования.

1 Ответ

4 голосов
/ 25 февраля 2011

Возвращается после завершения вызова ваших функций обратного вызова. Итак, последовательность событий выглядит так:

Enter: EnumDisplayMonitor
  Callback: MonitorEnumProc
  Callback: MonitorEnumProc
  Callback: MonitorEnumProc
  ...
Leave: EnumDisplayMonitor

Все подпрограммы Windows API этого рода ведут себя так, например, EnumProcess, EnumWindows и т. Д.

Код должен запускаться в контексте потока, и если бы такая процедура перечисления немедленно возвращалась и асинхронно вызывала обратные вызовы, то для этого пришлось бы создавать поток. Вы можете применить принцип наименьшего удивления здесь!

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