Форум программистов, компьютерный форум 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++ Используя поиск в ширину в графе выделить связаные копоненты неориентированного графа
Вот поиск в ширину кратчайшего рсстояния. А как его переделать что бы выделяло компоненты неориентированного графа. Вообще незнаю как помогите пожалуйста. //--------------------------------------------------------------------------- #pragma hdrstop #include <vector> #include <stdio.h> #include <queue> #include <iostream>...
C++ Описать структуру с именем AEROFLOT
Описать структуру с именем AEROFLOT , содержащую следующие поля: * название пункта назначения рейса; * номер рейса; * тип самолета; Написать программу, выполняющую следующие действия: * ввод с клавиатуры данных в массив, состоящий из семи элементов типа AEROFLOT; записи должны быть размещены в алфавитном порядке по названиям пунктов назначения; * вывод на экран пунктов назначения и...
C++ Задача на файлы http://www.cyberforum.ru/cpp-beginners/thread601625.html
1. Багаж пассажира характеризуется количеством вещей и общим весом вещей. Дан файл Bagazh, содержащий сведения о багаже нескольких пассажиров. Сведения о багаже каждого пассажира представляют собой запись с двумя полями: одно поле целого типа (количество вещей) и одно — действительное (вес в кило-граммах). Найти багаж, средний вес одной вещи в котором отличается не более чем на 0,3 кг от общего...
C++ Численно убедится есть ли заданная функция парной или непарной Численно убедится есть ли заданная функция y = f (x) парной или непарной на заданном отрезке . Высчитать ошибку вычисления и возможные точки разрыва функции. Проверить, например для функций y = x^4, y = tg x, y = e^x выполняя их вычисления на отрезке с шагом 0.1 ( парность - это четность ) Пожалуйста помогите с задачей я в тупике=( bool pair = true; for (double x=0; x<5; x += 0.1) if... подробнее

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


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

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

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

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

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

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

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

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

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