Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Уменьшить нагрузку потока - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Прошу составить схему в решении программы на С++ http://www.cyberforum.ru/cpp-beginners/thread601699.html
Напишите программу вычисления интеграла f(x)=5x<< x в квадрате-x+2 методом прямоугольников
C++ как освободить только первый элемент массива, не трогая остальные? Есть код: int *ptr; ptr = (int*)calloc(10, sizeof(int)); собственно вопрос: как освободить только первый элемент массива? не трогая остальные http://www.cyberforum.ru/cpp-beginners/thread601647.html
C++ Используя поиск в ширину в графе выделить связаные копоненты неориентированного графа
Вот поиск в ширину кратчайшего рсстояния. А как его переделать что бы выделяло компоненты неориентированного графа. Вообще незнаю как помогите пожалуйста....
C++ Описать структуру с именем AEROFLOT
Описать структуру с именем AEROFLOT , содержащую следующие поля: * название пункта назначения рейса; * номер рейса; * тип самолета; Написать программу, выполняющую следующие действия: *...
C++ Задача на файлы http://www.cyberforum.ru/cpp-beginners/thread601625.html
1. Багаж пассажира характеризуется количеством вещей и общим весом вещей. Дан файл Bagazh, содержащий сведения о багаже нескольких пассажиров. Сведения о багаже каждого пассажира представляют собой...
C++ Численно убедится есть ли заданная функция парной или непарной Численно убедится есть ли заданная функция y = f (x) парной или непарной на заданном отрезке . Высчитать ошибку вычисления и возможные точки разрыва функции. Проверить, например для функций y = x^4,... подробнее

Показать сообщение отдельно
Bers
Заблокирован
10.06.2012, 00:29
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
Я не уточнил, это под линукс, там spleep по секунде, я проверял. Сделал через нанослипп, помогло
Но видимо нужно пересмотреть структуру приложения, так как получается что мы один поток опросту гоняем, пока он мог что то обрабатывать
Мы на работе используем кросс-платформенное решение. Не могу светить код.
Но думаю, если опишу одну лишь идею, то беды не будет:


Смысл такой: препроцессор определяет где мы хотим взлететь:

1. Линукс: см в сторону gettimeofday()

2. Виндовс: см в сторону QueryPerformanceCounter(), QueryPerformanceFrequency()
(Так же, важно учитывать количество ядрышек, кои участвуют в процессе, ибо под виндовс на много-ядерных могут быть перекосы. Лучше настроить функции на работу с одним ядрышком, а потом восстановить штатную работу)

Таким образом мы засекаем время.

Далее, немножко поспим (ну или множко, это уж как нам захочется):

1. Линукс: usleep(микросенунды) поспать немножко. 10 микросекунд хватит за глаза что бы разгрузить ЦП

2. Виндовс: Если пауза меньше 1000, спим одну милисекунду, иначе - спим val милисекунд/1000

Итого: получаем две функции. Первая засекает время с точностью до микросекунд. Вторая организует задержку в микросекундах.

Профит: единообразная работа под линукс и виндовс. Временные задержки измеряемые в микросекундах. 1 секунда = 1 000 000 микросекунд.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru