Бесконечный цикл потребляет 100% ресурсов процессора

Я застрял в ситуации, когда мне нужно сгенерировать определенную частоту в несколько Гц. Я пробовал мультимедийные таймеры и все остальное, что есть в интернете, но до сих пор бесконечный цикл с некоторыми условиями "в другом месте" дал мне лучшие результаты. Но проблема в этом подходе состоит в том, что он потребляет почти весь процессор, не оставляя места для других приложений для правильной работы.

Мне нужен алгоритм с любой генерирует частоту от нескольких Гц до кГц.

Я использую Windows Plateform с C#.

4 ответа

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

При этом, какой джиттер у вас есть, и какую частоту вы должны поддерживать?

Я бы подошел к решению проблемы, сгенерировав "звуковую волну" и выведя ее на звуковую карту. Есть способы получить доступ к вашей звуковой карте из C#, например, используя XNA. Как уже отмечали другие, использование процессора для этого не очень хороший подход.

Поскольку вы генерируете таймер, вы хотите спать в зависимости от периода вашей частоты.

Вам придется запустить свой генератор частоты в своем собственном потоке и вызвать

Thread.Sleep(yourFrequencyPeriodMs);

в каждой итерации периода.

Использование Thread.Sleep(delay); в вашей петле

это уменьшить использование процессора

Другие вопросы по тегам