Форум программистов, компьютерный форум, киберфорум
Наши страницы
Алгоритмы
Войти
Регистрация
Восстановить пароль
 
AlexZZZ79
2 / 2 / 0
Регистрация: 02.09.2014
Сообщений: 81
1

Написать функцию,которая контролирует передачу строго N сообщений в секунду

20.03.2018, 13:39. Просмотров 288. Ответов 1
Метки нет (Все метки)

У нас есть обращение к API,которое допускает прием сообщении строго не более N в секунду.
Написать метод ,который может:
Возвращать ноль,если сообщение можно доставить.
Либо значение отличное от нуля,если сообщение нельзя доставить.Значение равно времени в нс через которое мы сможем отправить повторно еще раз сообщение. Многопоточности нет.
Что неверно сделано?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package ratelimiter;
 
 
public class RateLimiter {
 
    private final int SEC = 1000000000;// nanosec in second
 
    private  long startTime = 0;
 
    private long counter = 0;
 
    private   int maxMessagePerSec = 3;
 
    public void setMaxMsgPerSec(int maxMessagePerSec) {
        this.maxMessagePerSec = maxMessagePerSec;
    }
 
    public  int canSend() {
 
        if (counter == 0) {
 
            startTime = System.nanoTime();
 
        }
 
        counter++;
 
        long lastTime = System.nanoTime();
 
        if (lastTime <= startTime + SEC) {
 
            if (counter > maxMessagePerSec) {
 
                return (int) (startTime + SEC - lastTime);
 
            }
 
            else
 
            {
 
                return 0;
 
            }
 
        } else //more 1 seconds
 
        {
 
            startTime = System.nanoTime();
 
            counter = 1;
 
            return 0;
 
        }
 
    }
 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2018, 13:39
Ответы с готовыми решениями:

Написать функцию, присваивающую параметру t2 время на 1 секунду большее времени t1
Время можно представить с помощью часов, минут и секунд. Написать функцию перевод(t1,t2),...

Написать программу, которая пересчитывает скорость ветра из «метров в секунду» в «километров в час»
Написать программу, которая пересчитывает скорость ветра из «метров в секунду» в «километров в час»...

Написать программу, которая находит среди всех натуральных четырехзначных чисел те, цифры в которых образуют строго убывающую последовательность
Написать программу с использованием подпрограмм. В подпрограммах не должно присутствовать ввода...

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

Написать функцию, которая которая удаляет из массива элемент с заданным индексом
Было дано задание написать функцию, которая которая удаляет из массива элемент с заданным индексом....

1
Mysterious Light
Эксперт по математике/физике
4079 / 1993 / 404
Регистрация: 19.07.2009
Сообщений: 3,009
Записей в блоге: 21
21.03.2018, 00:58 2
Нужно уточнить условие об ограничении в 3 обращения в секунду. Верно ли, что это означает, что в последовательности времён обращений нет никаких трёх последовательных обращений, расстояние между крайними из которых меньше секунды?
Например, последовательность (в секундах от начала работы программы) [0.4, 0.8, 1.2, 1.9, 2.0] подходит, а [0.7, 1.6, 1.8, 1.9, 2.0] содержит 4 обращения в течении 0.5 секунды. Так?
Тогда не достаточно хранить одно время обращения (время обращения начала группы), следует хранить все N предыдущих обращений.

Для сравнения: Ваш алгоритм в случае [0.7, 1.6, 1.8, 1.9, 2.0] при первом вызове установит startTime = 0.4 сек, второй вызов вернёт ноль, при третьем вызове startTime = 1.8 и сбросится счётчик, затем четвёртый и пятый вызов вернёт ноль, но расстояние между 1.6 и 2.0 меньше 1 сек, то есть 4 вызова разрешатся в течении полсекунды.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2018, 00:58

Написать функцию, которая должна выдать длину той строки, которая короче
Напишите функцию с двумя строковыми параметрами. Функция должна выдать длину той строки, которая...

Написать функцию, которая должна выдать длину той строки, которая короче
Напишите функцию с двумя строковыми параметрами. Функция должна выдать длину той строки, которая...

Подскажите пожалуйста по взаимодействию процессов через передачу сообщений! Дали задание, но не объяснили
1. Нужно создать два проекта Win32 такого вида, как на картинках (вложения). 2. В обработчик...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru