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

Безопасны ли вызовы PostMessage для дескриптора, который равен 0?

У меня есть модуль данных с дескриптором HWND, который принимает вызовы PostMessage.

Дескриптор выделяется в DataModuleCreate следующим образом (TTNONVISUAL не определен):

{$IFNDEF TTNONVISUAL}
FHWND := AllocateHWND(WindProc);
{$ELSE}
FHWND := 0;
{$ENDIF}

Модуль данных также используется в невизуальной программе, где определено TTNONVISUAL .

WindProc в модуле данных заключен в {$ IFNDEF TTNONVISUAL}, поэтому в невизуальной программе WindProc нет и FHWND = 0

Будет ли в этой программе безопасно выполнять вызовы PostMessage для этого дескриптора 0?

Примечание. PostMessage не отправляет никаких дополнительных данных:
PostMessage (FHWND, WM_SYNC_PROGRESS, 0,0)
и WM_SYNC_PROGRESS - это WM_USER + 111, и других обработчиков WM_SYNC_PROGRESS нет.

28.06.2013

Ответы:


1

В документации говорится:

[При передаче NULL для дескриптора, который относится не к варианту Null, а к фактическому значению 0]:

Функция ведет себя как вызов PostThreadMessage с параметром dwThreadId, установленным на идентификатор текущего потока.

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

Обратите внимание, однако, что создание окна совершенно законно даже в невизуальном приложении. Подобные дескрипторы предназначены для отправки сообщений. Они не обязательно указывают на видимое окно. Собственно, для этого и предназначен AllocateHWND. Он используется для невизуальных элементов управления (например, TTimer), которые в конце концов должны иметь возможность получать сообщения.

28.06.2013
  • Вы можете создать для этого свою собственную функцию-оболочку, вместо того, чтобы помещать множество if во многих местах вашего кода. 28.06.2013
  • Новые материалы

    Сортировка структур JSON по нескольким полям в JavaScript
    Array.sort() не для слабонервных. Особенно, когда речь идет о сортировке сложных структур данных. Большинство руководств по JavaScript дают только краткое введение в Array.sort() . Обычно..

    Иллюзии разработки программного обеспечения
    Многие вещи не то, чем кажутся Реальность — это всего лишь иллюзия, хотя и очень настойчивая. Альберт Эйнштейн Разработка программного обеспечения никогда не бывает такой, какой кажется...

    Решил попробовать свои силы в кодировании.
    Решил попробовать свои силы в кодировании. Несмотря на то, что я по профессии программист, в больших компаниях вы не можете выбирать, что вы можете программировать; даже среда очень ограничена,..

    Расчет схождения-расхождения скользящих средних (MACD) с помощью JavaScript
    Чтобы рассчитать схождение-расхождение скользящих средних (MACD) с помощью JavaScript, вы можете использовать следующую формулу: MACD = 12-day EMA - 26-day EMA где экспоненциальная..

    Удивительное определение удивления, разговор
    Вы бросаете кубик, и выпадает 1. Удивительно? Вряд ли, с моей удачей. Но даже в целом, я думаю, не так уж много — он должен был приземлиться на что-то , верно? Что, если бы я сказал..

    Группа Expedia @ RecSys 2021
    ТЕХНОЛОГИЯ ЭКСПЕДИА ГРУПП - ДАННЫЕ Группа Expedia @ RecSys 2021 Наш недавний научный вклад в область рекомендаций по жилью В Expedia Group ™ ️ мы верим, что путешествия - это сила добра, и..

    Система Face ID с Python для глубокого обучения (с использованием TensorFlow)
    В настоящее время все вы используете идентификаторы лица на своих iPhone, устройствах Android, Windows, Mac и т. Д. В основном они делают то, что когда вы сначала настроите его, он получит..