1nd1g0, но я тестирую секвенсоры с активным внутренним генератором.
Этот топик читают: Гость
Ответов: 1429
Рейтинг: 50
|
|||
карма: 0 |
| ||
файлы: 1 | midi_io1.rar [4.2KB] [60] |
Ответов: 3889
Рейтинг: 362
|
|||
Леонид писал(а): слип не поможетЯ подозреваю, он про Sleep из kernel32.dll. Он-то поможет, но он до миллисекунд. login писал(а): У конкурентов миди занимает 0-0,1% проца.Так они и таймер используют внешний, много раз встречал в программах опции: "Какой таймер использовать" - свой или внешний (например, от реальноговиртуального порта MIDI на звуковой карте), в детали не вдавался. |
|||
карма: 1 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
login писал(а): Как будто интерфейсные точки между таймером и слипом мешают:Ну и выкинь лишнее.
|
|||
карма: 25 |
|
Ответов: 3889
Рейтинг: 362
|
|||
login писал(а): чуток не хватает точностиА ещё у Вас там ядро процессора подвисает на 0.5 мс каждую секунду. Особенно понравились ваши самодельные "хабы". code_25360.txt Индусы в шоке ) |
|||
карма: 1 |
| ||
файлы: 1 | code_25360.txt [1.8KB] [62] |
Ответов: 16884
Рейтинг: 1239
|
|||
Или даже так
|
|||
карма: 25 |
| ||
Голосовали: | login |
Ответов: 1429
Рейтинг: 50
|
|||
[offtop]1nd1g0, да уж, эти хабы очень быстрые, индусы мне завидуют [/offtop]
1nd1g0, а зачем нужна эта защита ресурсов, что она делает? Tad, да, убрал, спасибо. |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
[offtop]
login писал(а): эти хабы очень быстрые, индусы мне завидуютЯ не про Вас, а про таймеры со "сдвигом по фазе" (первым удивлюсь, если будут работать как должно в теории).[/offtop] login писал(а): зачем нужна эта защита ресурсов, что она делает?Каждый таймер порождает независимый поток, исключаем потенциальные конфликты, только я забыл отключить ожидание в свойствах: code_25361.txt |
|||
карма: 1 |
| ||
файлы: 1 | code_25361.txt [1.8KB] [62] | ||
Голосовали: | login |
Ответов: 1429
Рейтинг: 50
|
|||
карма: 0 |
| ||
файлы: 1 | code_25362.txt [1.6KB] [96] |
Ответов: 3889
Рейтинг: 362
|
|||
login, кстати, меня что-то берут сомнения, что программы "конкурентов" шлют всё короткими сообщениями MIDI. Гораздо целесообразнее им была бы потоковая передача, пакетами. Кстати, BASS может поддерживать то, чего не реализовано в компонентах (тоже пока не интересовался).
|
|||
карма: 1 |
|
Ответов: 1429
Рейтинг: 50
|
|||
1nd1g0, да, у bass я искал именно в хелпе ко всей их библиотеке, но не смог найти потоков миди.
Плюс я буду использовать bass ASIO, а не обычную bass.dll. ------------ Дoбавленo в 01.00: 1nd1g0, два таймера работают ровнее. ------------ Дoбавленo в 01.05: индусский код победил )) |
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
1nd1g0 писал(а): первым удивлюсь, если будут работатьlogin писал(а): индусский код победилКак и обещал, удивляюсь: Кстати, при включенных таймерах, к элементам, подключенным после SafeMode, желательно обращаться только через SafeMode.WaitMode=Wait, это убережёт программу от критических ошибок и гарантированно запишетпрочтёт данные. Другой способ - обращаться только при остановленных таймерах. |
|||
карма: 1 |
|
Ответов: 1429
Рейтинг: 50
|
|||
1nd1g0 писал(а): обращаться только через SafeMode.WaitMode=WaitЕсли мне надо узнать значение счетчика то так? code_25377.txt |
|||
карма: 0 |
| ||
файлы: 1 | code_25377.txt [1.7KB] [56] |
Ответов: 3889
Рейтинг: 362
|
|||
login писал(а): узнать значение счетчика Да, абсолютно верно, только FT-компоненты вне FT-контейнера не должны работать, и нужно понимать, что на опрос счётчика времени остаётся ровно между завершением одного "такта" (События таймера и ветки, его обрабатывающей, вплоть до самого её конца) и наступлением следующего. Кроме того, если такт произойдёт на момент опроса счётчика, то он будет пропущен. Можно, конечно, всем включить режим Wait (расплатой за это будет повышение шансов полной рассинхронизации, если такты лавинообразно будут выполняться дольше 500 мкс - наступит цепочка блокировок, начнётся серьёзный сдвиг по фазе и накопление неотработавших тактов в очереди, вероятно переполнение и... В общем, действуйте с умом. ------------ Дoбавленo в 21.02: Чтобы нивелировать эффект от пропуска тактов можно зарегистрировать не два, а четыре таймера, парами, запущенными со смещением, немного превышающим максимальное чтение счётчика по времени, режим - NoWait. Тогда вероятность, что хотя бы один из пары сработает, резко возрастёт. ------------ Дoбавленo в 21.05: Если хотим точности, то можно потратить некоторое время на автокалибровку программы - самостоятельный замер всех задержек и подгонка таймеров на конкретном ПК в конкретном режиме (мало ли, экономия энергии включится или конкурентный режим ядра процессора ОС реализует). Это самый профессиональный вариант, но работы потребуется немало |
|||
карма: 1 |
|
Ответов: 1429
Рейтинг: 50
|
|||
1nd1g0,
1nd1g0 писал(а): четыре таймера1nd1g0 писал(а): запущенными со смещением, немного превышающим максимальное чтение счётчика1nd1g0 писал(а): профессиональный вариантКак раз об этом вчера думал, не мог уснуть. Еще мои таймеры будут вызывать события в отдельных потоках типа: code_25381.txt Это тоже надо делать как-то защищенно? |
|||
карма: 0 |
| ||
файлы: 1 | code_25381.txt [2KB] [62] |
Ответов: 3889
Рейтинг: 362
|
|||
login писал(а): мои таймеры будут вызывать события в отдельных потокахНи в коем случае так не делайте. У SafeMode есть свойство Name, по сути это - имя группы. Я, кстати, это всё описал в справке по компоненту: SafeMode. Элементы из группы с одним именем блокируют друг друга, так что одномоментно исполняется только один какой-нибудь участок. Так, как делаете Вы, поступать чревато. Один поток может начать, например, заполнять массив, выделит память под структуру с указателем, но будет прерван системой и управление попадёт второму потоку, который, скажем, читает из этого массива, берёт элемент, считывает указатель, а туда ещё не успели записать значение, он обращается по адресу 0 (или что там за мусор лежал в этой ячейке памяти - не знает никто), система завершает поток или всё приложеие с критической ошибкой попытки доступа к чужой памяти, оно Вам нужно? |
|||
карма: 1 |
| ||
Голосовали: | login |