Blog. Just Blog

Образ мышления: Assembler

То, что не удается запрограммировать на Ассемблере, приходится паять
Образ мышления: Assembler - RSS-канал Образ мышления: Assembler - Карта сайта

Передача данных между процессами с помощью Mailslot

26.04.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Mailslot - один из самых простых способов обмена данными между процессами, который работает еще со времен Windows 95. Каналы Mailslot позволяют передавать данные от одного или нескольких клиентов к одному или нескольким серверам, в том числе в широковещательном режиме. На локальном компьютере может быть один серверный процесс, но в сети или в домене может одновременно работать несколько серверов. Количество клиентских приложений не ограничено. Принцип работы Mailslot схож с работой электронной почты.

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

Для создания канала используется функция CreateMailslot, которая в качестве одного из параметров принимает имя канала. Имя канала для серверного приложения должно иметь вид \\.\mailslot\имя_канала, при этом имя должно быть уникальным для приложения, но одинаковым в пределах клиента и сервера. Создавать канал должна серверная часть приложения. Она же определяет максимальный размер передаваемых сообщений и время ожидания. В случае необходимости этот параметр можно менять при помощи функции SetMailslotInfo.

Получив хэндл канала, сервер будет читать из него присланные сообщения. Обработчик выполняется в цикле по таймеру или же в отдельном потоке с задержкой между итерациями. Каждый шаг цикла начинается с получения состояния канала, это делается при помощи функции GetMailslotInfo, она возвращает количество сообщений в очереди на момент запроса и размер сообщения, которое будет получено первым. Если сообщений в очереди нет, то после выполнения функции параметр lpMessageCount будет равен нулю, а параметр lpNextSize примет значение MAILSLOT_NO_MESSAGE. Полученные сообщения читаются из канала функцией ReadFile, будто из обычного текстового файла.

Читать статью целиком »
Просмотров: 334 | Комментариев: 0

Как узнать установленный в системе масштаб текста

10.04.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter

Как узнать установленный в системе масштаб текста

Технический прогресс неумолимо наступает, разрешение мониторов с каждым годом становится все больше. В результате пользователям приходится увеличивать масштаб, чтобы не ломать глаза разглядыванием микрошрифта. И если программа изначально написана под "стандартный" DPI=96, то при отображении на мониторе с бОльшим значением DPI некоторые элементы ее интерфейса скорее всего будут отображаться некорректно. Это приходится учитывать разработчикам при написании своих программ. По возможности я тоже начал обновлять свои утилиты, чтобы в них учитывался установленный в системе масштаб текста. Естественно, что для этого потребовались определенные инструменты.

Читать статью целиком »
Просмотров: 493 | Комментариев: 3

Парсинг метаданных AIFF-файлов на Ассемблере

22.03.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter

Парсинг метаданных AIFF-файлов на Ассемблере

AIFF (Audio Interchange File Format) - это формат файлов для сохранения аудиоинформации без потерь, обеспечивающий высокое качество звука. Не самый популярный формат, в дикой природе встречается редко, в основном на устройствах производства Apple, но все равно имеет место быть. Меня же интересуют исключительно метаданные, которые в нем хранятся.

Читать статью целиком »
Просмотров: 341 | Комментариев: 0

Парсинг метаданных Opus-файлов на Ассемблере

06.03.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter

Парсинг метаданных Opus-файлов на Ассемблере

Пиратил тут очередную партию музыкальных новинок и один из альбомов оказался в невиданном ранее формате с расширением ".opus". Естественно, первым желанием было не послушать, а поковыряться во внутренностях файлов. Как оказалось, аудиокодек Opus это детище тех же разработчиков, которые до этого выпустили кодек OGG. Несомненно, алгоритмы кодирования звукового потока отличаются, а вот сама внутренняя структура файла практически в точности повторяет разобранный ранее формат OGG. В том числе и способ хранения метаданных, которые меня интересуют.

Читать статью целиком »
Просмотров: 390 | Комментариев: 0

Отправка POST- и GET-запросов на Ассемблере

15.02.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter

Отправка POST- и GET-запросов на Ассемблере

В наше время интернет-технологий профессиональные приложения должны уметь работать с удаленными сервисами. Хороший пример был в недавней статье про оптимизацию изображений. Тут есть все: отправка файла через POST-запрос и получение ответа в виде текстового JSON, а затем скачивание изображения по прямой ссылке через GET-запрос. Давайте реализуем работу с POST- и GET-запросами на Ассемблере, а чтобы польза от работы получилась не только теоретической, но и практической, это будет пример с оптимизацией графических файлов через API сервиса TinyPNG.

Читать статью целиком »
Просмотров: 832 | Комментариев: 2

prev 01 ... 04 05 06 07 08 09 10 ... 67 next
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.06 сек. / MySQL: 2 (0.0022 сек.) / Память: 4.5 Mb
Наверх