Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как правильно параллелить процессы 
:(
    Опции темы
Гость_suvor
Дата 3.6.2005, 16:59 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Всем здравствуйте! Вот работаю я с микрофоном. То есть крутится некая апишка пишет звук в память, и "одновременно" я его обрабатываю. Возникает вопрос- как параллелить процессы. Либо пользовать в "обработчике" DoEvents-ы, либо все время его останавливать и стартовать по таймеру. Ну если по таймеру, то выходит "рывками" и код сложнее. Сделал с Events-ами. Вроде все работает, но как-то "нестабильно". Лезут такие эффекты что только ушами хлопаю! И вот я в сомнении - то ли это просто баг какой, то ли я в принципе пытаюсь достать гланды через задний проход? И далее:
Если в принципе, то -а как надо -через таймер? Или может можно как-то увеличить "размер" DoEvents-а? Или может еще как? И третье: вот положим время апишке читать уровень сигнала, а система занята - что тогда? -апишка ноль запишет? или вообще пропустит? или может такого вообще не бывает?(может она мимо процессора работает?) -я понимаю что наверняка навряд кто знает, но все же какие мнения?

  Вверх
cardinal
Дата 3.6.2005, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата
Возникает вопрос- как параллелить процессы.

Никак. Ты можешь только переключаться между процессами. И таким образом создавать имитацию того, что они выполняются параллельно. То есть тебе надо придумать способ переключения между твоими процессами. Ты можешь создавать потоки, между которыми твоя ОС будет автоматом переключаться, но для этого тебе надо писать на чем угодно, но не на VB. smile
Если честно я пока не очень понял, что ты делаешь (и чем тебя не устраивает DoEvents) поэтому больше ничего сказать не могу...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Vach
Дата 3.6.2005, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 17.10.2003
Где: Санкт-Петербург

Репутация: 8
Всего: 18



2Гость_suvor
Тут с верху есть "Quick Search for" >> Multi threading "in language" >> Visual Basic. Найди чтото вроде "Multi Threading in VB6" или чтото типа того...
Мало - иди в гугли.
ЗЫ Работать вроде будет НО! отладка тебя доканает (только коректный выход и никаких остановок - всё валится).
Подумай может тебе DoEvents хватит?
Удачи.

Это сообщение отредактировал(а) Vach - 3.6.2005, 21:23
PM MAIL ICQ   Вверх
Guest
Дата 4.6.2005, 07:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Cardinal-у: Не, я наверно спросил очень непонятно! -Я понимаю что физической параллельности процессов нет (хотя может апишка может работать с аудиокартой без постоянного участия процессора?) Но далее. В рамках VB я вижу два способа дать время апишке на работу - или вставить DoEvents в обработчика или завершить его, а потом перевызвать по таймеру. И оба в общем работают. Я сделал с DoEvents. Но похоже что DoEvents дает системе слишком короткую передышку в результате чего лезут разные глюки (например апишке надо все время подсовывать память а это получается через раз! -видимо не успевает что-то там завершаться). И вот теперь я в сомнении -или переделать все на использование таймера (а там могут свои проблемы быть)или это без разницы? То есть вопрос не в том как вообще сделать, а как сделать правильно, что бы потом при развитии обработчика эти геморрои уже не доставали! Потому как ведь часто бывает, что вроде все работает, а на самом деле в соседнюю квартиру через Владивосток посылаешь! И потом это все аукается.
Vach-у: спасибо, попробую посмотреть, хотя звучит все страшновато.
  Вверх
efedron
Дата 4.6.2005, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 16.3.2005

Репутация: 4
Всего: 4



ты хотя бы кусок кода выложил, чтоб людям можно было поэксперементировать smile
--------------------
Прежде чем совершить акт разрезания определенной материи целесообразно удостовериться в правильности всех произведенных измерений.
PM MAIL   Вверх
Voldemar2004
Дата 4.6.2005, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Цитата

Вот работаю я с микрофоном. То есть крутится некая апишка пишет звук в память, и "одновременно" я его обрабатываю.


Если не жалко, скажи какая АПИ-шка. И можно ли записывать с линейного входа звуковой карты, или это в VB никак не прет? (С микрофона у меня тож примерчик есть - DirectX). А то у всех кого можно спрашиваю, во многих книжках приведены примеры записи с микрофона - а с Line-In - хоть головой об монитор, - нету. smile

Цитата

Ну если по таймеру, то выходит "рывками" и код сложнее. Сделал с Events-ами. Вроде все работает, но как-то "нестабильно".


Ага. Я когда в своей проге дохожу до финализации результирующего звукового файла, то приходится делать дополнительное время ожидания 3 секунды. Иначе возможны такие тормоза - ой-ой-ой.

Цитата

Или может еще как? И третье: вот положим время апишке читать уровень сигнала, а система занята - что тогда? -апишка ноль запишет? или вообще пропустит?


Ну так, можно же при запуске твоей проги сделать приоритет всех остальных активных прог самым низким (если конечно не жалко:)). А приоритет твоей проги повысить. А в крайнем случае кэшировать в файл то, что записываешь в память, ну и обновлять (дописывать в этот файл) через регулярные промежутки времени. Такая технология реализована в Sound Forge например.

Цитата

Возникает вопрос- как параллелить процессы.

Цитата

Никак. Ты можешь только переключаться между процессами. И таким образом создавать имитацию того, что они выполняются параллельно.


Не понял. ОС виндоус же мультизадачная, так процессов там полно работающих параллельно.
Может Гость_suvor имеет в виду выделять им равные приоритеты работы ЦП: 2 процесса - 50% первому 50% второму процессу. Ну так это ж нереально просчитать (ЦП то у всех разные по производительности). Или Гость_suvor хотел один процесс разделить на 2 (3/4 и т.д.)? А?

Цитата

(хотя может апишка может работать с аудиокартой без постоянного участия процессора?)


Это как? ЦП всегда необходим для работы с любой железкой, пусть и загружен на 1%.


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Gannibal
Дата 4.6.2005, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 742
Регистрация: 15.4.2003
Где: 010101

Репутация: 18
Всего: 17



попробуй в буффер записывать а потом из буффера обрабатывать а во второй буффер опять записывать вот может пример подтолкнёт на мысль

http://bbs.vbstreets.ru/viewtopic.php?p=14139#14139 там посмотри в два буффера записывать .. если так взять то можно с одного обрабатывать сразу а в другой писать// smile или я непонял вас чтоли


--------------------
Я родился в этом безумном мире - и Я сделаю всё чтобы в нём выжить!
PM MAIL ICQ   Вверх
Guest
Дата 5.6.2005, 17:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











1. Апишек там цельный выодок -waveInOpen, waveInStart, WaveInPrepareHeader, WaveInAddBuffer...
2. Насчет линейного входа -понятия не имею. Могу только заметить, что микрофон работает как пассивный, так и активный (с батарейкой). Да и разьемы одинаковые. Так что может линейный вход и не актуален?
3. Насчет приоритета - ну меня же не другие задачи волнуют (хотя может и зря) а конкуренция моей же апишки которая звук принимает и моего же обработчика. Так что причем тут приоритеты я не понял.
5. Я может неграмотно слово процесс употребил что породило непонимание. -Работает мной же запущенная апишка и мой же обработчик. Не знаю процессы это или нет но Вопрос в том как грамотнее апишке дать время подышать- закрывая на время обработчик и потом открывая по таймеру или с помощью DoEvents.
Вопрос то мне казался не слишком специфичным и я думал на него просто есть однозначный ответ.
6. ЦП то конечно необходим, но все ли время? Почему бы аудиокарте не иметь свою память и не писать туда сбрасывая в оперативную только когда система освободится? Именно это я имел в виду. То есть я понятия не имею так ли это. но почему бы нет?
7. Два буфера- хорошо, но не в том проблема. Трудность с подсовыванием памяти я привел как пример эффектов конкуренции. А так я действительно поставил перед вызовом цикл в 5000 DoEventsov и все тип топ.
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0480 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.