3

поиска в Интернете на разницу между этими двумя вызовами функции, я обнаружил, что:SendMessage и PostMessage, который лучше использовать?

Разница между этими двумя вызовами API это способ, которым они возвращают управление в вызывающую программу. С Элемент управления SendMessage элемент управления не возвращается вызывающему приложению до тех пор, пока окно, в которое было отправлено сообщение, завершило обработку отправленного сообщения, однако с Элемент управления PostMessage немедленно возвращается вызывающему приложению независимо от погоды или не отправляется сообщение были процессы.

PostMessage: Посылает сообщение в очереди сообщений, связанных с потоком и возвращается, не дожидаясь, пока поток, чтобы обработать этот messaage.

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

PostMessage является асинхронной функцией, где, как SendMessage является синхронной функцией.

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

Обратите внимание, что я использую MFC в Visual Studio 2010 и для этого кода:

CWnd *pParentOfClass = CWnd::GetParent(); 
pParentOfClass -> 

Я просто эти функции для отправки messsages:

  • PostMessageW

  • SendMessage

  • SendMessageW

Другие вопросы:
Можете ли вы сказать мне разницу между SendMessage и SendMessageW?

+0

Это зависит от того, какие сообщения вы хотите отправить - не могли бы вы привести несколько примеров? –

+0

Нужно больше объяснений. Я скоро отредактирую свой вопрос. см. отредактированный раздел. спасибо @EdwardClements – sepideh

+0

Пожалуйста, не задавайте два вопроса в том же сообщении. –

ответ

4

Вы уже ответили на свой вопрос, указав SendMessage и PostMessage.

SendMessage: Отправляет сообщение и ждет, пока процедура, отвечающая за сообщение, не завершится и не вернется.

PostMessage: Отправляет сообщение в очередь сообщений и немедленно возвращается. Но вы не знаете, когда это сообщение действительно обрабатывается. Поэтому, если вы ожидаете ответа от этого обработанного сообщения, вы, скорее всего, получите его и через сообщение.

Это действительно зависит от того, какой из них использовать, но конечные результаты почти одинаковы, это всего лишь время. Кроме того, PostMessage особенно полезен в многопоточных приложениях, что позволяет безопасно связываться между потоками через созданные ими окна.

PostMessage или SendMessage, которые заканчиваются на A или W, являются просто индикаторами того, как строки будут интерпретироваться, то есть одно или многобайтовые, соответственно. Те, у кого нет конца A или W, являются макросами препроцессора и будут делегировать все, на что настроено приложение.

+0

, можете ли вы объяснить эту часть больше? ** Те, у которых нет окончания A или W, являются макросами препроцессора и будут делегировать все, на что настроено приложение. ** – sepideh

+0

Не должно быть слишком важным, просто используйте общие (т. Е. Без специальных окончаний). Для получения дополнительной информации см. [ANSI/Unicode в WinAPI] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd374089%28v=vs.85%29.aspx). – bcause

+0

Infact @no_seriously, я понял из вашего ответа, что если я ожидаю, что обработчик вернет значение и выполнит мой процесс на основе этого значения, я должен использовать SendMessage, но главный вопрос - это тот, который имеет лучшую производительность. Часть вашего ответа говорит **, это просто время ** Не могли бы вы объяснить это немного больше? – sepideh

Смежные вопросы