Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/35: Рейтинг темы: голосов - 35, средняя оценка - 4.69
Just Do It!
 Аватар для XLAT
4204 / 2662 / 654
Регистрация: 23.09.2014
Сообщений: 9,045
Записей в блоге: 3

Нужен простой таймер-будильник(консольный)

16.05.2018, 11:50. Показов 7478. Ответов 52

Студворк — интернет-сервис помощи студентам
Играю в БДО(не реклама), и вот понадобился простой таймер, который бы оповещал меня о прошествии заданного мной периода времени. То что я нашел в инетах, извиняюсь, просто хрень, все обнаруженные в ней недостатки меня не устраивают:
- навязчивые функции(кнопка на страницу разраба в полэкрана)
- сложный(а знам заведомо глючный) интерфейс
- неработающие функции(типа выбранный тип бипера просто не слышно)
- главные для меня функции не удобно сделаны или глубоко спрятаны.
- прочие глюки.

А вот так должен выглядеть концепт таймера под меня:
1. окошко вызываемое комбоклавишей.
2. кнопка переключения двух режимов: "В минутах до сигнала" и "Точное время сигнала"
3. место ввода циферек.

Все)
звуковой файлик прибит гвоздями, но можно его в ручную поменять в папочке)

И так на данной этапе нужен исключительно консольный вариант С++ класса делающий это чудо.
Графоболочку я прикручу отдельно)

С чего начать? Что посоветуете?


Буду рад каким-нибудь шаблонам по этой теме))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.05.2018, 11:50
Ответы с готовыми решениями:

Консольный таймер
Здравствуйте,мне для программы нужен консольный таймер,скажите пожалуйста,как его сделать. Знаю что тема уже поднималась,но там ответа я не...

Простой консольный калькулятор
Я новичок, изучаю C++ всего первый день, начал изучение по книге Либерти "C++ за 21 день". Пока что из всех полученных мною знаний я...

Простой консольный калькулятор - не пойму, где ошибка
#include <stdio.h> int main() { float num1,num2,res,moreCalc; char operation; ...

52
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,910
16.05.2018, 12:44
Цитата Сообщение от XLAT Посмотреть сообщение
"В минутах до сигнала"
Bash
1
sleep 10m && vlc file.mp3
ждать 10 минут, потом запустить vlc чтобы проигрывал file.mp3
Цитата Сообщение от XLAT Посмотреть сообщение
"Точное время сигнала"
Bash
1
sleep $(( $(date --date='12:42' +%s) -  $(date +%s) )) && vlc file.mp3
Консоль и без посторонней помощи с такими задачами справляется.
1
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
16.05.2018, 13:43
COKPOWEHEU, что, если у меня винда?
1
Just Do It!
 Аватар для XLAT
4204 / 2662 / 654
Регистрация: 23.09.2014
Сообщений: 9,045
Записей в блоге: 3
16.05.2018, 14:03  [ТС]
COKPOWEHEU,
тема эта, всетаки, в [C++] ветке,
это как бы намекает)))

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
потом запустить vlc чтобы проигрывал file.mp3
на данном этапе просто вызвать функцию startsignal(); c TODO внутри.
чуть по позже буду проигрывать FMOD'ом.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,910
16.05.2018, 14:21
Цитата Сообщение от GbaLog- Посмотреть сообщение
COKPOWEHEU, что, если у меня винда?
... то смотрите документацию по тамошним командам, наверняка тоже можно собрать решение. Плюс в последнюю винду вроде как встраивают какую-то часть линукса с башем, но тут могу ошибаться.
Цитата Сообщение от XLAT Посмотреть сообщение
тема эта, всетаки, в [C++] ветке,
То есть вам нужно не любое решение задачи, а именно код на С++, который ее решает. Просто на bash всю вашу задачу можно уместить в десяток строк, а на С++ так вряд ли получится.
В любом случае system() никто не отменял.

Добавлено через 8 минут
Если надо именно на С++:
Функция gettimeofday() из <time.h> возвращает время в виде структуры (дни, часы, минуты и т.д.) с точностью до микросекунд. В принципе, программу можно строить на ней одной.
Функция sleep() из <unistd.h> приостанавливает программу на заданное количество секунд
В принципе, этого уже достаточно для написания программы
1
Just Do It!
 Аватар для XLAT
4204 / 2662 / 654
Регистрация: 23.09.2014
Сообщений: 9,045
Записей в блоге: 3
16.05.2018, 14:44  [ТС]
COKPOWEHEU,
разберем интерфейс с батоманией:
1. нужно открыть текстовый файл в каком то редакторе
2. найти там нужные строчки и отредактировать
3. сохранить
4. ага: VLC или аналог


а как должно:
1. вызов комбоклавишей окошка
2. печатаем время
3 ввод
все.

и самое главное, я то написал то "простой таймер", но простой таймер не означает мелкие плюшки, типа индикации обратного отсчета времени, ну, и еще парочка таких же мелочевок)))

И самое главное замечание по сабжу: простой в обращении, а не простой в одной строчке кода.
Возможно, это будет подразумевать наличие некоторого интеллекта таймера. ))
0
 Аватар для mrden777
14 / 20 / 14
Регистрация: 20.03.2018
Сообщений: 485
16.05.2018, 14:49
А можно просто в конце BEEP(333,333,333); написать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <windows.h>
 
int main() {
    Beep(1480,200);   
    Beep(1568,200);   
    Beep(1568,200);   
    Beep(1568,200);      
    Beep(739.99,200);   
    Beep(783.99,200);   
    Beep(783.99,200);   
    Beep(783.99,200);         
    Beep(369.99,200);   
    Beep(392,200);   
    Beep(369.99,200);   
    Beep(392,200);   
    Beep(392,400);   
    Beep(196,400); 
system("pause");}
0
Just Do It!
 Аватар для XLAT
4204 / 2662 / 654
Регистрация: 23.09.2014
Сообщений: 9,045
Записей в блоге: 3
16.05.2018, 15:06  [ТС]
Цитата Сообщение от mrden777 Посмотреть сообщение
А можно просто в конце BEEP(333,333,333); написать
а куда этот бип выводится?
у меня на четырех домашних компах(с ноутом) встроенный в корпус динамик отсутствует.
0
 Аватар для mrden777
14 / 20 / 14
Регистрация: 20.03.2018
Сообщений: 485
16.05.2018, 15:09
XLAT, если спикера нет, все идет на колонки, или в звуковую карту а там или наушники или минидинамики есть в мониторе
1
Just Do It!
 Аватар для XLAT
4204 / 2662 / 654
Регистрация: 23.09.2014
Сообщений: 9,045
Записей в блоге: 3
16.05.2018, 17:32  [ТС]
mrden777, спаб)
я уже откомпилил и проверил)

Пока вот такой первый блин:
C++
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
#include <iostream>
#include <windows.h>
 
void startsignal() 
{   // Вместо TODO
    Beep(1480,200);   
    Beep(1568,200);   
    Beep(1568,200);   
    Beep(1568,200);      
    Beep(739,200);   
    Beep(783,200);   
    Beep(783,200);   
    Beep(783,200);         
    Beep(369,200);   
    Beep(392,200);   
    Beep(369,200);   
    Beep(392,200);   
    Beep(392,400);   
    Beep(196,400); 
}
 
///---------------------------------------------------------------------------->
int main()
{   system ("mode con cols=40 lines=10");
 
    int user_input_time(0);        // в минутах.
 
    while(true)
    {
        //--------------------------------------------------------------------->
        while(true)
        {   std::cout << "Input minutes(35000 min max): ";
            std::cin  >> user_input_time;
 
            if (std::cin.fail())
            {   std::cout << "\nErorr input value!\n\n";
                std::cin.clear();
                std::cin.ignore(32767,'\n');
            }
            else if(user_input_time > 35000) 
            {        std::cout << "\nError::Big user time\n\n";
            }
            else break;
        }
 
        //--------------------------------------------------------------------->
        user_input_time *= 60000;
        std::cout << "\nGone to sleep...\n\n\n";
        Sleep(user_input_time);
        std::cout << "Awake!!!\nPlay Signal!";
        startsignal();
 
        system("cls");
        user_input_time = 0;
    }
 
    //system("pause");
    return 0;
}
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
16.05.2018, 18:29
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <thread>
 
int main()
{
    while (true)
    {
        int x{};
        std::cout << "Seconds: ";
        std::cin >> x;
        if (x > 0) {
            std::cout << "\nwaiting...\n";
            std::this_thread::sleep_for(std::chrono::seconds(x));
            std::cout << "\nWakeup!!!\a\a\a\a\a\a\a\a\n\n";
        }
        else break;
    }
    return 0;
}
1
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,910
16.05.2018, 18:59
Лучший ответ Сообщение было отмечено XLAT как решение

Решение

Цитата Сообщение от XLAT Посмотреть сообщение
разберем интерфейс с батоманией:
Вы же собираетесь вызывать программу по сочетанию клавиш. Вот и вызывайте оттуда скрипт. Он в консольном режиме запрашивает время и... все. Для задания относительного времени можно добавить в начало строки символ +, то есть 20:00 это точное время срабатывания, а +20:00 - через 20 часов от текущего.
Простой текстовый интерфейс, предлагающий ввести одну строку в любом случае быстрее графического, где нужно наводиться на поле, выбирать галочкой относительное/абсолютное время, нажимать ОК, ну и т.д.
Цитата Сообщение от XLAT Посмотреть сообщение
но простой таймер не означает мелкие плюшки, типа индикации обратного отсчета времени
Вот это уже другой вопрос... который лучше было озвучить в момент постановки задачи. Нет, оно, конечно, тоже решается, без проблем. Но если не хотите на скриптах то и не буду выкладывать вариант.
Цитата Сообщение от XLAT Посмотреть сообщение
4. ага: VLC или аналог
Запустить можно любой проигрыватель или другую программу. Хоть блокнот на полный экран вывести.
Цитата Сообщение от XLAT Посмотреть сообщение
простой в обращении, а не простой в одной строчке кода
Любите вы искать себе проблемы на ровном месте. Вместо того чтобы просто запустить скрипт, в его приглашении вбить нужное время и один раз нажать Ентер, будете писать графическую программу с кучей полей ввода, свистелок и прочего. В общем-то, на здоровье, опыт лишним не будет.
1
Just Do It!
 Аватар для XLAT
4204 / 2662 / 654
Регистрация: 23.09.2014
Сообщений: 9,045
Записей в блоге: 3
16.05.2018, 19:50  [ТС]
текущая версия
Вложения
Тип файла: rar MyTimer.rar (5.5 Кб, 7 просмотров)
0
Just Do It!
 Аватар для XLAT
4204 / 2662 / 654
Регистрация: 23.09.2014
Сообщений: 9,045
Записей в блоге: 3
16.05.2018, 20:09  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Любите вы искать себе проблемы на ровном месте
на данный момент нужна плюшка прерывание(отмена) отсчета таймера

Добавлено через 1 минуту
собсно код
C++
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
61
62
63
#include <iostream>
#include <windows.h>
 
void anim(int t)
{   system("cls");
    SetWindowPos(GetConsoleWindow(), HWND_TOPMOST ,0, 0, 0, 0, SWP_HIDEWINDOW );
    system ("mode con cols=40 lines=1");
    for(int i = t; i > 0; i -= 1000)
    {   std::cout << "\r" << i/1000 << " sec.";
        Sleep(1000);
        std::cout << "\r                                         ";
    }
    system ("mode con cols=40 lines=10");
    SetWindowPos(GetConsoleWindow(), HWND_TOPMOST ,0, 0, 0, 50, SWP_SHOWWINDOW );
    system ("mode con cols=40 lines=10");
}
 
///---------------------------------------------------------------------------->
int main()
{   //SendMessage(GetConsoleWindow(), WM_SETICON, ...);
    SetConsoleTitle("My Timer 2018");
 
    SetWindowPos(GetConsoleWindow(), HWND_TOPMOST ,0, 0, 0, 0, SWP_SHOWWINDOW );
 
    //system("title Мой таймер 2018");
    system ("mode con cols=40 lines=10");
 
    int user_input_time(0);        // в минутах.
 
    while(true)
    {
        //--------------------------------------------------------------------->
        while(true)
        {   std::cout << "Input minutes: ";
            std::cin  >> user_input_time;
 
            if (std::cin.fail())
            {   std::cout << "\nErorr input value!\n\n";
                std::cin.clear();
                std::cin.ignore(32767,'\n');
            }
            else if(user_input_time > 35000) 
            {        std::cout << "\nError::Big user time(35000 min max).\n\n";
            }
            else break;
        }
 
        //--------------------------------------------------------------------->
        user_input_time *= 60000;
        std::cout << "\nGone to sleep...\n\n\n";
        //Sleep(user_input_time);
        anim(user_input_time);
        //std::cout << "Awake!!!\nPlay Signal!";
        std::cout << "\nWakeup!!!\a\a\a\a\a\a\a\a\n\n";
        //startsignal();
 
        system("cls");
        user_input_time = 0;
    }
 
    //system("pause");
    return 0;
}


для этого, как всем известно, нужно научить консоль принимать сообщения)
как?

уже рассматриваю вариант перехода на винапишное окно.
но, возможно, есть шанс выкрутиться))
0
 Аватар для mrden777
14 / 20 / 14
Регистрация: 20.03.2018
Сообщений: 485
16.05.2018, 20:12
Прога на выключение компа уже существует, зачем изобретать ВОЛОСАПЕД непонимаю назвается power_off https://yadi.sk/d/XMqzoLOd3VNK2n Там вроде и таймеры есть на всею неделю
0
Just Do It!
 Аватар для XLAT
4204 / 2662 / 654
Регистрация: 23.09.2014
Сообщений: 9,045
Записей в блоге: 3
16.05.2018, 20:27  [ТС]
Пока только добавил иконку)

Полностью проект(VS2010) + exe:
Вложения
Тип файла: rar MyTimer.rar (56.1 Кб, 21 просмотров)
1
Just Do It!
 Аватар для XLAT
4204 / 2662 / 654
Регистрация: 23.09.2014
Сообщений: 9,045
Записей в блоге: 3
16.05.2018, 20:33  [ТС]

Не по теме:

Цитата Сообщение от mrden777 Посмотреть сообщение
Прога на выключение компа уже существует
блин, на выключение компа мне не треба)

здесь же вроде не флейм раздел? или нет?



во вложении файл ресурсов я потер(зря), если что, то придется заново его компилить, сори.
0
 Аватар для mrden777
14 / 20 / 14
Регистрация: 20.03.2018
Сообщений: 485
16.05.2018, 20:34
Надо было еще вывод секунд сделать в окошке
А то не понятно он в работе или нет
0
Just Do It!
 Аватар для XLAT
4204 / 2662 / 654
Регистрация: 23.09.2014
Сообщений: 9,045
Записей в блоге: 3
16.05.2018, 20:48  [ТС]
mrden777, да сделал я)
там он(вывод в секундах с обратным отсчетом) есть,
но после ввода времени таймер запускается и чо пялится на него: оно скрывается.

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

Цитата Сообщение от mrden777 Посмотреть сообщение
А то не понятно он в работе или нет
придется минуту(ну не час же на тест))) подождать)
но можно ноль задать)))
0
 Аватар для mrden777
14 / 20 / 14
Регистрация: 20.03.2018
Сообщений: 485
17.05.2018, 10:11
XLAT, Ну я жду окончательную версию таймера с настройками и секундами в окошке.
Не зря же лайк поставил ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.05.2018, 10:11
Помогаю со студенческими работами здесь

Простой консольный конвертер валют - проверить корректность реализации
Всем привет! Я новичок на вашем форуме, как и в C++. Изучаю его третий день. Вот решил подкрепить свои знания и написать простенький...

Сделать простой таймер
У меня есть игра сапер мне нужно сделать таймер что бы он начинал работ при открытие и заканчивал при победе или поражении !!

Простой консольный "сапер"
Здравстсвуйте все мне нужно написать игру сапер консольную очень простым и понятным языком На языке c++.Консольное приложение.

Консольный будильник: как сверять время и проиграть мелодию
Добрый вечер. Задали мне тут задачку, не знаю как реализовать. Задача: Написать консольную программу, которая будет содержать в себе...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru