Хобрук: Ваш путь к мастерству в программировании

C - WinAPI - отправить сообщение в поток и дождаться его

Я хочу отправить сообщение в WinAPI в окно, созданное в другом потоке, а затем дождаться обработки этого сообщения.

Это возможно? Заранее спасибо.


Ответы:


1

Используйте SendMessage(), чтобы отправить сообщение окну.

SendMessage() блокирует вызывающий поток до тех пор, пока сообщение не будет доставлено и обработано диспетчером сообщений целевого окна.

Из документации SendMessage() :

Отправляет указанное сообщение в окно или окна. Функция SendMessage вызывает оконную процедуру для указанного окна и не возвращает значение до тех пор, пока оконная процедура не обработает сообщение.

01.06.2014
  • Этот метод может привести к взаимоблокировке... Возможно, вместо этого безопаснее использовать PostMessage и взаимодействовать с графическим интерфейсом с помощью настраиваемых сообщений... Просто мысль... 02.06.2014
  • @AlwaysLearningNewStuff Возможно SendMessageTimeout может быть предпочтительнее? Однако, учитывая то, о чем просил ОП, я бы выбрал прямо SendMessage. 03.06.2014
  • @EricBrown: создавать окна в функции потока рискованно. Главный поток должен быть единственным, кто владеет графическим интерфейсом, а функция потока не должна не создавать окна или напрямую обращаться к элементам графического интерфейса. Когда потоку и графическому интерфейсу необходимо обмениваться данными, они обычно отправляют (не отправляют) настраиваемые сообщения, что предотвращает тупиковые ситуации. Также используются другие способы синхронизации, такие как Event Objects, Mutexes, Critical sections и т. д. Тем не менее, я не настолько опытен и, возможно, что-то упускаю. Вопрос ОП не так ясен, но я предполагаю, что он обожжется своим подходом... 03.06.2014
  • @AlwaysLearningNewStuff hwnds, предназначенные только для сообщений, очень удобны для обмена данными между потоками внутри приложения. 03.06.2014
  • @EricBrown: Не знал этого. Мне это кажется сложным, поэтому я бы уклонялся от этого. Может быть, я попробую это в свободное время, просто чтобы посмотреть, как это работает (это может оказаться очень удобным). С наилучшими пожеланиями. 03.06.2014
  • Новые материалы

    Понимание СТРУКТУРЫ ДАННЫХ И АЛГОРИТМА.
    Что такое структуры данных и алгоритмы? Термин «структура данных» используется для описания того, как данные хранятся, а алгоритм используется для описания того, как данные сжимаются. И данные, и..

    Как интегрировать модель машинного обучения на ios с помощью CoreMl
    С выпуском новых функций, таких как CoreML, которые упростили преобразование модели машинного обучения в модель coreML. Доступная модель машинного обучения, которую можно преобразовать в модель..

    Создание успешной организации по науке о данных
    "Рабочие часы" Создание успешной организации по науке о данных Как создать эффективную группу по анализу данных! Введение Это обзорная статья о том, как создать эффективную группу по..

    Технологии и проблемы будущей работы
    Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

    Игорь Минар из Google приедет на #ReactiveConf2017
    Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..