Функция PostThreadMessage 


Функция PostThreadMessage помещает сообщение в очередь сообщений заданного потока. Она возвращает значение без ожидания обработки сообщения потоком.

Синтаксис

BOOL PostThreadMessage(
    DWORD idThread,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
);

Параметры

idThread

[in] Идентификатор потока, в очередь которого помещено сообщение.

Функция завершается ошибкой, если заданный поток не имеет очереди сообщений. Система создает очередь сообщений потока, когда поток делает свой первый вызов одной из функций модулей USER или GDI. Для получения дополнительной информации, см. раздел Замечаний.

Windows 2000/XP: Этот поток должен или принадлежать тому же самому рабочему столу, что и вызывающий поток, или процессу с тем же самым локальным уникальным идентификатором (LUID). В противном случае функция завершается ошибкой и возвращает значение ERROR_INVALID_THREAD_ID.

Msg

[in] Устанавливает тип сообщения, которое будет помещено в очередь.

wParam

[in] Определяет дополнительную конкретизирующую сообщение информацию.

lParam

[in] Определяет дополнительную конкретизирующую сообщение информацию.

Возвращаемые значения

Если функция завершается успешно, величина возвращаемого значения - не нуль.

Если функция завершилась ошибкой, величина возвращаемого значения нулевая. Чтобы получить дополнительные данные об ошибке, вызовите GetLastError. GetLastError возвращает значение ERROR_INVALID_THREAD_ID, если в параметре idThread - не допустимый идентификатор потока, или если поток, заданный idThread не имеет очереди сообщений.

Замечания

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

Установите событие, чтобы указать, что поток готов принять помещаемые в очередь сообщения.

Поток, в очередь которого помещается сообщение, извлекает его путем вызова функции GetMessage или PeekMessage. Член hwnd возвращенной структуры MSG имеет значение ПУСТО (NULL).

Сообщения, отправленные PostThreadMessage не связаны с окном. Сообщения, которые не связаны с окном, не могут быть распределены функцией DispatchMessage. Поэтому, если поток получателя находится в модальном цикле (как используется функция  MessageBox или DialogBox), сообщения, будет потеряно. Чтобы перехватывать сообщения потока в то время как он в модальном цикле, используйте определяемую потоком hook  -процедуру - ловушку события.

Система  совершает сортировку только системных сообщений (которые в диапазоне от 0 до WM_USER). Чтобы отправлять другие сообщения (которые значением выше WM_USER) другому процессу, Вы должны сделать специальную сортировку (маршалинг).

Windows 2000/XP: Имеется ограничение в размере 10,000 помещенных в очередь (синхронных) сообщений в очередь сообщений. Это ограничение должно быть достаточно большим. Если ваше приложение выходит за пределы ограничения, оно должно быть переделано, чтобы избежать потреблять так много системных ресурсов. Чтобы регулировать это ограничение, измените нижеследующий ключ системного реестра:

 
HKEY_LOCAL_MACHINE

SOFTWARE

Microsoft

Windows NT

CurrentVersion

Windows

USER

PostMessageLimit

Минимальное приемлемое значение - 4000.

Windows 95/98/Me: PostThreadMessageW поддерживается  подпрограммой Microsoft Layer for Unicode (MSLU). Чтобы использовать подпрограмму, Вы должны добавить некоторые файлы к вашему приложению, как это определено в Microsoft Layer for Unicode для систем Windows 95/98/Me.

Смотри также

Обзор Сообщения и очереди сообщений, GetCurrentThreadIdGetMessageGetWindowThreadProcessIdMSGPeekMessagePostMessageSleep,  WaitForSingleObject

Размещение и совместимость PostThreadMessage

Windows. NET Server

Да

Windows XP

Да

Windows 2000

Да

Windows NT

Да версии 3.1 и выше

Windows Me

Да

Windows 98

Да

Windows 95

Да

Используемая библиотека

User32.lib

Заголовочный файл

 

- объявлено в

Winuser.h

- включено в

Windows.h

Unicode

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz