Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
1 / 1 / 0
Регистрация: 01.09.2009
Сообщений: 159

Точность цикла потока и загруженность процессора

21.02.2024, 09:30. Показов 12184. Ответов 5

Студворк — интернет-сервис помощи студентам
Создаю поток со стабилизацией времени цикла
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    int64_t CycleNS = 100000;
    
    while (ExitT == false)
    {
        StartTim = std::chrono::steady_clock::now();
 
        // .....;
 
 
        boost::this_thread::sleep_for(boost::chrono::microseconds(
                                          CycleNS - Duration(std::chrono::steady_clock::now() - StartTim).count()));
//        while (CycleNS - Duration(std::chrono::steady_clock::now() - StartTim).count() > 0 ){}
    }
В данной ситуации стабилизация цикла плохая, время цикла «прыгает» 100-110, иногда и 120 мс, но при этом загруженность процессора низкая ~0%. Если стабилизацию сделать на while, то будет наоборот, стабилизация очень хорошая и загрузка процессора >30%. Есть возможность совместить хорошую стабилизацию цикла и низкую загрузку процессора?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.02.2024, 09:30
Ответы с готовыми решениями:

Как только захожу в игру, загруженность процессора упирается в 100%, спустя минут 5 загруженность падает до 10-30%
Захожу я значит поиграть в Овервотч, но при заходе в игру первые 5 минут у меня загруженность процессора 90% (msi afterburner показывает...

Загруженность процессора 50%
Доброго времени суток! Сегодня появилась такая проблема - svchost.exe грузит процессор на 50%. Поискал в интернете решение проблемы:...

Загруженность процессора?
Уже нашёл ответ на Си. Помогите, пожалуйста, с "переводом" на Visual Basic. Ну а в идеале можно и сразу на PowerBasic :) #include...

5
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 862
21.02.2024, 10:09
у вас ОС реального времени? скорее всего нет. так что вы можете добиться чего-то подходящего на вашем конкретном компьютере/ОС но на других компах/ОС будет другая ситуация.
ещё неизвестно как поведёт ваш цикл когда комп будет выполнять ещё какую-нибудь программу помимо вашей.

ну и неплохо былобы написать зачем такое надо - особенно на какую стабильность вы расчитываете
0
1 / 1 / 0
Регистрация: 01.09.2009
Сообщений: 159
21.02.2024, 10:33  [ТС]
ОС-ы обычные Windows (разработка, тестирование...), Linux встроенная, штатная работа. Поток будет работать на отдельном ядре и общаться с аппаратурой.
0
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 862
21.02.2024, 11:53
Вот из-за того что на обычной ОС нельзя добиться стабильных задержек приходится делать дополнительные контроллеры - которые получают от компа некоторый минимальный объём информации чтобы они могли проработать пару секунд сами без участия компьютера, поскольку комп не сможет быстро отреагировать и выдать упавляющий сигнал.

Раз уш вы не хотите рассказывать что за аппаратура, какие требования по задержкам - период, джиттер и пр. Критичность задержек, как выдаётся управляющий сигнал - есть ли промежуточный драйвер который может решить что надо подсобрать данные и попозже отправить из пакетом и куча другой инфы. То ответы тоже будут очень пространными и обобщёнными.

Не забывает также что разрабатываете вы на современном компе - с хорошим быстродействием, а работать софт будет на самом слабом железе )))
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
17.04.2024, 01:59
Знаю, что тема немного старая, но я бы посоветовал вместо sleep_for использовать sleep_until с расчётом времени "просыпания" от начала первой итерации.

Момент следующего срабатывания при этом можно получить примерно так: next_activation = start + ((now() - start) / period + 1) * period.

Использование sleep_until вместо sleep_for позволит не спать дольше в случае, если поток может быть вытеснен ОС и он будет вытеснен после вычисления таймаута для sleep_for, но до самого sleepа.

Расчёт следующей активации от начала первого цикла нивелирует дрифт в периоде, если это важно.

Так же, если решите использовать sleep_until, то стоит посмотреть реализацию. Не знаю на счёт boost, но реализация из libstdc++, например, может использовать системное время для steady_clock.

Если можно использовать непереносимое API, то в Linux есть clock_nanosleep c CLOCK_MONOTONIC и TIMER_ABSTIME, или таймеры timerfd.
1
1 / 1 / 0
Регистрация: 01.09.2009
Сообщений: 159
17.04.2024, 08:40  [ТС]
Спасибо, протестирую Ваши варианты.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.04.2024, 08:40
Помогаю со студенческими работами здесь

Загруженность процессора
Доброго вечера всем! Есть ли в php что нибудь для определения текущей загрузки процессора процессами (операционка Linux 2.6)?

Влияет ли ОС на загруженность процессора?
Влияет ли ОС на процессор(то есть если я установлю вместо WIndows 7 Windows Xp, нагрузка на проц будет меньше?)

Windows 7 Загруженность процессора
ставил как x86 так и x64 постоянно не с того ни с сего грузится проц, сборка 7600 рус, активированная, на бета - версиях вроде таког оне...

Повышенная загруженность процессора
Здравствуйте. Возникла проблема на ноутбуке Acer Nitro 5 - в отсутствие работы каких-либо требовательных программ загрузка ЦП колеблется в...

Не понятная загруженность процессора.!
Всем здравствуйте. Несколько дней назад возникла такая странность: Постоянно системный процесс NT Kernel & System загружает мой 4-х...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru