Как я могу реализовать периодический выход в методе CONS с нерегулярными временными шагами и без внутреннего состояния?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как я могу реализовать периодический выход в методе CONS с нерегулярными временными шагами и без внутреннего состояния?

Сообщение Anonymous »

У меня есть симуляция домена во времени, работающие с временными часами являются адаптивными и могут расти или сокращаться, поэтому нет фиксированного количества шагов до постоянного времени. Но я хочу, чтобы он вернулся только один раз за секунду.
Этот метод в настоящее время объявляется Const .
(временные рамки обычно составляют 1000 на секунду, поэтому мне не нужно предоставлять случай, когда один шаг полностью переоценивает интервал времени). Флаг. вызов кода (не большая проблема)
[*] Условия гонки риска, когда мы пытаемся использовать его в многопоточных настройках

Примечание: я знаю, что я мог бы использовать Const_cast или необработанные указатели, чтобы достичь изменения, несмотря на Const, но это не хорошее решение и не помогу помочь в условиях расы/многочисленные. Функторный класс (который в настоящее время не будет компилироваться из -за стоимости) < /p>

Код: Выделить всё

class FixedTimeOutputDecider {

/// 
/// This should return true once per "regularity" which defaults to once per second
/// 

public:
FixedTimeOutputDecider(double regularity = 1.0) : _regularity(regularity), _next_output_time(0) {}

bool should_output(int step, double time) const {
if (time > _next_output_time) {
// the next time to output should be the next integer*regularity
_next_output_time = (int(floor(time / _regularity)) + 1) * _regularity;

return true;
} else {
return false;
}
}

bool operator()(int step, double time /*extra data here*/) const {
if(should_output(step, time)){
//Outputing code here
}
}

private:
const double _regularity;
double _next_output_time;
};
Можно ли вывозить один раз в секунду в безрянном функке, учитывая нерегулярный размер шага?>

Подробнее здесь: https://stackoverflow.com/questions/797 ... time-steps
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»