Этот метод в настоящее время объявляется 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
Мобильная версия