Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
9 / 7 / 3
Регистрация: 03.02.2017
Сообщений: 124

Переменная и clock() равны друг другу

24.01.2018, 21:24. Показов 1855. Ответов 14

Студворк — интернет-сервис помощи студентам
Есть переменная t отвечающая за последнее время. После куска кода мне нужно найти прошедшее время от t.
Делаю таким образом:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
t = clock();//Запоминаю последнее время
        if(GetAsyncKeyState(0x43)){//C
            if(!key[0]){
                cout<<"\n C";
                key[0] = true;
                //short t2 = clock();
                razn = clock() - t;//считаю разность. (Нынешнее время - последнее время)
                if(razn > 70){//çäåñü ïîìåíÿé çíàê íà <
                    cmb[k] = 'C';
                    cout<<": "<<razn<<" - time "<<t<<" cl "<<clock();
                    k++;
                }else{
                    cmb[2] = ' ';
                    cmb[1] = ' ';
                    cmb[0] = ' ';
                }
                rel[0] = false;
            }
        }
В итоге razn всегда равен 0. Либо 5 строк кода выполняются меньше чем за 0.001 секунду, что вряд ли, либо я что-то сделал не так, что 99%.
Вопрос: Почему razn = 0 и можно ли вообще так измерять разницу во времени?
Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.01.2018, 21:24
Ответы с готовыми решениями:

Равны ли строки друг другу
Пользователь вводит две строки если они равны друг другу значит вывести YES иначе NO

Проверить равны ли строки друг другу
Пользователь вводит три строки программа выводит YES если они все равны друг другу иначе NO

Вывести числа, которые почти равны друг другу (их разность меньше 0,01)
Здравствуйте. Занимаюсь С++ по книге Бьерна Страуструпа. Помогите решить задачу: Напишите программу, содержащую вектор и цикл while,...

14
10 / 10 / 3
Регистрация: 23.12.2017
Сообщений: 55
24.01.2018, 21:35
Вы не задаёте период времени, сколько нужно ждать,я бы предпочёл сделать задержку вот так.
C++
1
2
3
4
5
6
7
8
9
int main() {
 
    setlocale(LC_ALL, "");
    clock_t delay = 10 * CLOCKS_PER_SEC; //10 секунд задержки
    clock_t start = clock();
    while (clock() - start < delay); //ждём эти 10 секунд
    system("pause");
    return 0;
}
0
9 / 7 / 3
Регистрация: 03.02.2017
Сообщений: 124
24.01.2018, 21:37  [ТС]
0x1337, хм... Сейчас попробую.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
24.01.2018, 21:38
Цитата Сообщение от 0x1337 Посмотреть сообщение
я бы предпочёл сделать задержку вот так.
C++
1
std::this_thread::sleep_for(wait_time)
C++
1
Sleep(wait_time_ms)
Но только не
C++
1
while (clock() - start < delay);
Это ужасно во всех смыслах.
0
10 / 10 / 3
Регистрация: 23.12.2017
Сообщений: 55
24.01.2018, 21:40
Croessmah, а что не так?
0
9 / 7 / 3
Регистрация: 03.02.2017
Сообщений: 124
24.01.2018, 21:43  [ТС]
0х1337, нет так не работает. Похоже я не совсем понял принцип. В консоли
C++ (Qt)
1
cout<<": "<<razn<<" - time "<<t<<" cl "<<clock();
Все так же выводит, что razn = 0, а t все еще равна clock().
И для чего нужна задержка? Она именно приостанавливает саму программу на n-ое время или как?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
24.01.2018, 21:43
Цитата Сообщение от 0x1337 Посмотреть сообщение
Croessmah, а что не так?
То, что пока космические корабли бороздят мы ждем, наше приложение ненасытно жрет ресурсы в цикле, вместо того, чтобы спокойно поспать.
0
10 / 10 / 3
Регистрация: 23.12.2017
Сообщений: 55
24.01.2018, 21:50
Croessmah, Если мы говорим о больших проектах, аля "трейнер" для игры, или ещё чего, класс "clock_t"- более предпочителен, т.к Sleep - стопит работу не только нашего "Трейнера" а и всего приложения, что нежелательно. А так, я привёл пример использования этого подхода. Да, сейчас "sleep" более предпочителен, но, в будущем..
0
9 / 7 / 3
Регистрация: 03.02.2017
Сообщений: 124
24.01.2018, 21:51  [ТС]
Цитата Сообщение от 0x1337 Посмотреть сообщение
0x1337,
Ваш способ не совсем подходит Вы можете подсказать что-то еще?
0
10 / 10 / 3
Регистрация: 23.12.2017
Сообщений: 55
24.01.2018, 21:55
Moais, А что нужно то? Нажать кнопку,а через какое-то время что-то там посчитать?
0
9 / 7 / 3
Регистрация: 03.02.2017
Сообщений: 124
24.01.2018, 21:58  [ТС]
Нужно определить: Если разность во времени не превышает, к примеру, 70, то выполнить участок кода, иначе выполнить другой. А сама проблема заключается в том, что переменная t через некоторое время как-то равна clock()'у.
и как здесь делать обращение к форумчанам?))
0
10 / 10 / 3
Регистрация: 23.12.2017
Сообщений: 55
24.01.2018, 22:08
Moais,
Цитата Сообщение от Moais Посмотреть сообщение
Нужно определить: Если разность во времени не превышает, к примеру, 70, то выполнить участок кода, иначе выполнить другой.
Зачем это вообще проверять? Мне кажется,есть более рациональное решение этой задачи. Которую мы, кстати, не знаем =)
Цитата Сообщение от Moais Посмотреть сообщение
А сама проблема заключается в том, что переменная t через некоторое время как-то равна clock()'у.
Оно и понятно, так и должно быть. И кстати, вы не проверяете константу CLOCKS_PER_SEC (если вкратце - без неё, на разных компьютерах, одни и те же значения "задержки" будут случаться с разной скоростью)
0
9 / 7 / 3
Регистрация: 03.02.2017
Сообщений: 124
25.01.2018, 11:04  [ТС]
0x1337,
Цитата Сообщение от 0x1337 Посмотреть сообщение
Зачем это вообще проверять? Мне кажется,есть более рациональное решение этой задачи. Которую мы, кстати, не знаем =)
К примеру чтобы отследить двойное нажатие буквы/клавиши "С". Без учета задержки мы можем нажать C, через 5 минут еще раз и это будет считаться за двойное нажатие, а не за два отдельных.

Цитата Сообщение от 0x1337 Посмотреть сообщение
Оно и понятно, так и должно быть.
Это мне не понятно: D Уже протестил на другом коде. Да, оно действительно равно нулю. Но почему? Вот здесь, к примеру, данный код работает. И я не понимаю почему, если он фактически аналогичен... Не могу понять

Добавлено через 1 минуту
Цитата Сообщение от 0x1337 Посмотреть сообщение
И кстати, вы не проверяете константу CLOCKS_PER_SEC
Хм, да. Хорошо, буду учитывать это:)
0
10 / 10 / 3
Регистрация: 23.12.2017
Сообщений: 55
25.01.2018, 12:54
Moais,
Цитата Сообщение от Moais Посмотреть сообщение
К примеру чтобы отследить двойное нажатие буквы/клавиши "С". Без учета задержки мы можем нажать C, через 5 минут еще раз и это будет считаться за двойное нажатие, а не за два отдельных.
Насколько я помню, GetAnyKeyState эмулирует нажатие клавиши постоянно, а не пока мы держим её. Поясню, в тот момент пока мы держим ту же "с" в жизни пройдёт доля секунды, а эта функция "с эмулирует" множество разных нажатий, хотя мы по факту нажали лишь 1 раз. В этом может быть вся проблема. А ещё, проблема может быть в том, что переменные t инициализируются сразу после запуска программы, и по сути, к моменту пока мы нажмём нужную кнопку - время уже закончится. Вот, как я первую проблему решал.
C++
1
2
3
4
5
6
7
    static bool doBind;
    static float pressedTime;
    if (g_InputSystem->IsButtonDown(g_Options.misc_bind_change) && abs(pressedTime - g_GlobalVars->curtime) > 0.3)
    {
        pressedTime = g_GlobalVars->curtime;
        doBind = !doBind;
    }
Если вкратце - мы "задаём" время нажатия, вручную, а далее мы проверяем doBind, и в зависимости от этого что-то там делаем.
0
9 / 7 / 3
Регистрация: 03.02.2017
Сообщений: 124
25.01.2018, 15:26  [ТС]
0x1337 конечно спасибо. Но первая проблема у меня уже была решена:) Мне бы разобраться со временем:)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.01.2018, 15:26
Помогаю со студенческими работами здесь

Определить какое наибольшее число подряд идущих элементов последовательности равны друг другу
Добрый вечер, решил задачку, но выдаёт ошибку на пятом тесте. У меня два вопроса: Есть ли более простой способ решения и, собственно,...

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

Задача страуструпа: Измените программу так, чтобы она выводила числа, которые почти равны друг другу
Есть программа #include &lt;iostream&gt; using namespace std; int main () { double val_1 = 0.0;

Одинаковые строки не равны друг другу (QFile, QString)
Доброго времени суток. Столкнулся с проблемой при работе с файлами. Проблема заключается в несоответсвии строк. Например, у меня есть...

Нужно сгенерировать такие 8 чисел, чтобы все не были равны друг другу
есть 8 целых случайных чисел от 1 до 15 нужно сгенерировать такие 8 чисел, чтобы все не были равны друг другу


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru