1 | |
Потоки или коллбэки?24.08.2014, 14:26. Показов 1826. Ответов 7
Метки нет (Все метки)
Вопрос по структуре приложения. Потребовалось выполнение нескольких задач условно одновременно - выдавать звук в выходной поток и записывать со входного. В интернете нашел пример, там дается команда на запись потока, а потом в бесконечном цикле проверяется, не закончился ли процесс записи. Естественно, приложение в это время висит и ждет. Я убрал бесконечный цикл ожидания и при вызове метода записи задал коллбэк функцию, которая вызовется автоматически по завершении процесса, там освобождаю ресурсы и завершаю процесс, то же самое и с воспроизведением - только свой коллбэк. В результате во время этих двух процессов я могу параллельно делать еще много задач. Мой вопрос такой - надо ли было по-хорошему явно вынести эти процессы в два потока, в каждом из которых можно было оставить бесконечный цикл ожидания завершения процесса? И вообще, когда используются потоки?
0
|
24.08.2014, 14:26 | |
Ответы с готовыми решениями:
7
Коллбэки или проверка пароля Нужны ли коллбэки или это синтаксический сахарок сомнительно Коллбэки 3.7 Процессы или потоки ? |
Ушел с форума
|
|||||||||||
24.08.2014, 14:42 | 2 | ||||||||||
Цикл ожидания, это, как правило, что-то такое:
Во втором с этим получше, но момент выхода из цикла не синхронизирован с состоянием флага (точность зависит от величины задержки SomeTime). Так что в общем случае отдельные потоки здесь не нужны, да и они только усложняют логику программы - нужно думать о корректном завершении потоков, о сигнализации выхода и т.д.
1
|
24.08.2014, 14:50 [ТС] | 3 |
В найденном мной примере было без слипа, просто бесконечный цикл. Кстати, с микроконтроллеров без RTOS я привык, что sleep относится к глобальному контексту и блокирует выполнение всех процессов на заданное время. Здесь, видимо, не так, почитаю про sleep в windows. Но если говорите, что потоки не нужны, и когда есть возможность задать коллбэк по завершении процесса - то лучше воспользоваться коллбэком, чем задавать sleep в цикле ожидания? Мне так кажется.
0
|
Ушел с форума
|
|
24.08.2014, 15:24 | 4 |
Эти "калл-бяки ", скорее всего, уже реализованы системой в отдельном потоке.
Т.е. система выделяет отдельный поток или пул потоков на выполнение длительной операции, а затем в нужные моменты вызывает зарегистрированные функции всех, кто "подписался". Дополнительные потоки сверху здесь как бы ни к чему. Впрочем, не зная конкретики, это все домыслы.
0
|
24.08.2014, 15:41 [ТС] | 5 |
Конкретно в моем случае я вызываю функцию waveInOpen и задаю параметр CALLBACK_WINDOW, а в процедуре окна обрабатываю ловлю событие MM_WIM_DATA, по которому освобождаю ресурсы. С параллельным воспроизведением - аналогично. Подозреваю, что сам вызов waveInOpen создает отдельный поток.
0
|
Каратель
|
|
24.08.2014, 17:48 | 6 |
предпочитайте callback.
не нужно дергать систему, она сама уведомит когда будет результат. be lazy. когда нет возможности навесить callback, тогда уж можно и разорится на поток. везде где есть возможность "зависнуть", а нам это не нужно. длительные расчеты, чтение/запись файлов, работа с сетью, работа с БД и т.д. и т.п.
1
|
25.08.2014, 01:49 [ТС] | 7 | |||||||||||||||
Просветите еще пожалуйста в таком моменте - вот моя процедура запуска проигрывания семплов из памяти:
0
|
Каратель
|
|
25.08.2014, 02:06 | 8 |
нормальное
статические это те же глобальные только ограниченные областью видимости функции/класса/единицы трансляции
1
|
25.08.2014, 02:06 | |
25.08.2014, 02:06 | |
Помогаю со студенческими работами здесь
8
Потоки или FILE Хэндлы или потоки в C++11 Параллельное программирование или потоки Потоки и копирование или подсчет Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как написать микросервис на Go/Golang
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang
Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
|
Как написать микросервис с нуля на C#
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
|
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
|
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
|
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
|
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента!
4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве).
Первое вводное занятие. . .
|
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
|
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений
Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
|
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
|
UserScript для подсветки кнопок языков программирования в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения:
/ / ==UserScript==
/ / @name CF_DefaultLangSelect
/ / . . .
|
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
|
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
|