Понимание MsgWaitForMultipleObjects

В отладочной версии часто включены утверждения и/или отладочные символы. Это может привести к различному расположению памяти. В случае неверного указателя переполнения массива или подобного доступа к памяти Вы получаете доступ в одном случае к критической плохой памяти (например, указатель функции) и в другом случае, возможно, просто некоторая некритическая память (например, просто строка документа повреждается)

9
задан Stephen Burke 22 September 2009 в 17:14
поделиться

1 ответ

Вы не обрабатываете входящее сообщение потока пользовательского интерфейса. Взгляните на в блоге Раймонда (также см. здесь ) для примера.

  while (true) {
    switch (MsgWaitForMultipleObjects(1, &h,
                         FALSE, INFINITE, QS_ALLINPUT)) {
    case WAIT_OBJECT_0:
      DoSomethingWith(h); // event has been signalled
      break;
    case WAIT_OBJECT_0+1:
      // we have a message - peek and dispatch it
      while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
        // TODO:  must handle WM_QUIT; see Raymond's blog for details
        TranslateMessage(&msg);
        DispatchMessage(&msg);
      }
      break;
    default:
      return FALSE; // unexpected failure
    }
  }
15
ответ дан 4 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: