LRESULT DispatchMessage( const MSG *lpmsg
LRESULT DispatchMessage( const MSG *lpmsg ); Lpmsg – указатель на структуру MSG, содержащую сообщение. Возвращаемое функцией значение обычно игнорируется. Функция TranslateMessage переводит сообщения с виртуальными кодами нажатых клавиш в символьные сообщения с ASCII-кодами. Символьное сообщение помещается в очередь сообщений и его можно будет прочитать функциями GetMessage или PeekMessage. BOOL TranslateMessage( const MSG *lpMsg ); lpMsg – указатель на структуру MSG, содержащую сообщение. Соответствие между событиями, на входе и выходе TranslateMessage: WM_KEYDOWN – WM_CHAR клавиша нажата. WM_KEYUP – WM_DEADCHAR клавиша отпущена. WM_SYSKEYDOWN – WM_SYSCHAR системная клавиша нажата (Alt + клавиша, F10). WM_SYSKEYUP – WM_SYSDEADCHAR системная клавиша отпущена.
21. Оптимизация: цель, критерии, требования, методика, средства. Оптимизация программ не стремится к поиску оптимального варианта, т. е. варианта, который нельзя улучшить. Оптимизация программ – процесс улучшения программы в смысле некоторых критериев. Цель оптимизации программ: получение из работающего варианта программы другого работающего варианта, обладающего желаемыми показателями в смысле некоторых критериев. Основными критериями при оптимизации программ являются: § Скорость работы § Объем используемой памяти § Объем места, занимаемого на диске Если программа работает медленно: § ее не удастся применить на практике (пример: Прогноз погоды на завтра нужен сегодня, а не через неделю) § с ней откажутся работать потенциальные пользователи ( пример: Обработка фотографий – слишком большое время ожидания, и у нас не купят наш графический редактор) Если программа требует много памяти (ОЗУ):
§ с ней откажутся работать потенциальные пользователи Если программа требует много места на жестком диске: § ее могут отказаться приобретать потенциальные пользователи ( пример: вспомним наше недовольство при установке программ с 5 компакт-дисков, а также разговоры о том, что каждый новый Windows занимает в 3 раза больше места, чем старый). Обычно 1 из критериев является основным. В современных условиях это, как правило, скорость работы (память стоит дешево). Требования: – Переносимость – Небольшая трудоемкость – Значимый выигрыш – Понятность программы – Возможность развития Прежде чем оптимизировать программу, убеждаемся в ее работоспособности. Основной прирост производительности приходит от алгоритмической оптимизации, а не от «трюков» ( ищем эффективные алгоритмы ). Оптимизация кода ≠ Ассемблерная реализация ( улучшаем код для увеличения быстродействия в рамках ЯПВУ ). Перед переписыванием на Ассемблер изучаем ассемблерный листинг после работы компилятора ( знаем ли мы, как сделать лучше? ). Если все вышеперечисленное не помогло и мы знаем как улучшить ассемблерный код, только тогда переходим на Ассемблер. Средства оптимизации: § Оптимизирующий компилятор. § Средства профилировки. § Оптимизирующие библиотеки. Главное средство: голова программиста, снабженная знаниями основ программирования, теории алгоритмов, архитектуры ЭВМ.
22. Алгоритмическая оптимизация: временная сложность, сравнение алгоритмов, примеры. Алгоритмическая оптимизация – выбор хорошего в некотором смысле алгоритма для конкретной задачи. Принципиальный момент: алгоритмическая оптимизация дает наибольший прирост производительности по сравнению с другими вариантами (к примеру, программной). Никакая оптимизация под современные архитектуры не позволит исправить ошибок, допущенных при выборе подходящего алгоритма.
Как это делать? – Анализируем задачу. – Ищем (литература, Интернет, изобретаем сами) алгоритмы ее решения. – Сравниваем эти алгоритмы по тем критериями, которые для нас имеют смысл. – Выбираем лучший алгоритм. – Думаем, нельзя ли улучшить и его. Сравнение алгоритмов – теория сложности. Теория сложности игнорирует константы. Для получения реальной картины и выбора путей дальнейшей (не алгоритмической) оптимизации необходимо оценить полученную реализацию. Задача: Дано прямоугольное поле размера m x n. В каждой ячейке лежит определенное кол-во денег. Буратино начинает свой путь в ячейке (1, 1) и за 1 шаг способен двигаться на 1 клетку вправо, либо на 1 клетку вниз. Требуется найти наибольшее кол-во денег, которое может собрать Буратино на пути из (1, 1) в (m, n) и соответствующий путь. Алгоритм 1. Полный перебор всех путей. Перебор: – сгенерировать все пути; – для каждого найти сумму денег; – из сумм найти максимум. 1-я разумная модификация: сгенерировав путь, сразу считать сумму и сравнивать с максимумом.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|