Зарегистрируйтесь, чтобы получать сообщения Windows, когда в MFC сигнализируется событие Win32

0

У меня есть простое диалоговое приложение MFC. Я хотел бы сделать некоторые перекрывающиеся ввода-вывода. Ожидание совпадающего дескриптора события в отдельном потоке - боль. Мне интересно, есть ли вызов функции для регистрации сообщения Windows на возвращаемый дескриптор? Очень похоже на то, как работает WSAAsyncSelect, но без сокета и просто общий обработчик Win32 (событие, мьютекс, канал и т.д.).

Моя среда: Windows XP, Visual Studio 2010

Благодарю!

  • 0
    Что именно вы хотите? Хотите дождаться сигнала вместо бесконечного "while (flag) Sleep (SLEEP_TIME);"?
  • 1
    Смысл перекрывающегося ввода-вывода состоит в том, чтобы не использовать другой поток. Если вы используете другой поток, тогда просто использовать блокировку ввода-вывода намного проще. Похоже, вы делаете не правильно, невозможно догадаться, почему.
Показать ещё 1 комментарий
Теги:
winapi
mfc

1 ответ

4
Лучший ответ

Учитывая ваши ограничения, я бы использовал RegisterWaitForSingleObject(), чтобы зарегистрировать процедуру обратного вызова, которая будет вызываться, когда сигнализируется ожидаемый объект.

Функция обратного вызова проста - ему просто нужно отправить сообщение, определенное пользователем, в интересующее окно, указывающее, что событие сигнализируется.

Тем не менее, если вы используете ReadFileEx(), WriteFileEx() или другую функцию ввода-вывода, которая поддерживает обратный вызов завершения, вы можете использовать этот обратный вызов для достижения аналогичной функциональности.

  • 0
    RegisterWaitForSingleObject, вероятно, самая близкая вещь в Win32. Спасибо Bukes! FYI, ReadFileEx и WriteFileEx требуют изменяемого состояния потока для обратных вызовов завершения. Я не думаю, что MFC это делает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню