Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/28: Рейтинг темы: голосов - 28, средняя оценка - 4.79
 Аватар для Maskca
1 / 0 / 0
Регистрация: 15.12.2008
Сообщений: 97

Таймер на с++

20.04.2010, 13:24. Показов 5970. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, мне нужно написать таймер на с++ с помощью классов, методов, объектов. Без них у меня вроде получилось :
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
int sec, min;
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if ( sec < 59 )
    {
        sec++;
        if ( sec < 10)
            Label3->Caption = "0" + IntToStr(sec);
        else
            Label3->Caption = IntToStr(sec);
    }
    else
    {
        sec = 0;
        min++;
        Label1->Caption = IntToStr(min);
        Label3->Caption = "00";
    }
 
    if (sec==5) {
Form1->Close();
}
}
label1 это как бы минуты (0), а label3 секунды (00). На 5 секунде форма закрывается.
А как это осуществить с помощью классов у меня не выходит, помогите пожалуйста!!
Я что то пробивал но наверное вовсе не так:
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
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
 
class timer
{
void time(int min, int sec)
{
if ( sec < 59 )
    {
        sec++;
        if ( sec < 10)
            Label3->Caption = "0" + IntToStr(sec);
        else
            Label3->Caption = IntToStr(sec);
    }
    else
    {
        sec = 0;
        min++;
        Label1->Caption = IntToStr(min);
        Label3->Caption = "00";
    }
 
    if (sec==5) {
Form1->Close();
}
 
}
 
}
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.04.2010, 13:24
Ответы с готовыми решениями:

Таймер должен через время положить файл на БД. [Таймер]
Мне нужен таймер, а я не знаю как его делать именно, чтоб в конкретное время он сохранял информацию в файл. Чтобы он в конкретный период...

Поясните за таймер!) Или таймер на формах наследниках
Доброго. В проге есть основная форма и в процессе работы создается 1-2-3-4-5 форм наследников все одного типа, но вот в чем загвоздка, на...

Таймер похожий на таймер в delphi
Добрый всем)В общем хочу создать класс таймера похожий на класс таймера на delphi.Суть в том,что я хочу включать и выключать таймер за счет...

15
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
20.04.2010, 14:30
ну строго говоря первый пример у тебя и есть "пример с классами", т.к. основан на событии OnTimer класса TTimer ...
второй тоже с классами, но еще и с какой-то избыточностью)
советую посмотреть в сторону api-шной функции
Code
1
VOID GetSystemTime(LPSYSTEMTIME lpst)
ну а там дальше можно описать и свой класс) а для этого учи мат.часть.
0
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
20.04.2010, 15:45
-------------

Добавлено через 34 минуты
На форме TTimer, 3 TLabel и TButton
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
class Timer
{
      private:
      int hour, h_s;
      int min, m_s;
      int sec, s_s;
      bool Started;
      TTimer * tmr;
      TLabel * h_l, * m_l, *s_l;
      AnsiString alert_mes;
 
      public:
      Timer(){}
 
      Timer(TTimer * t, TLabel * hl, TLabel * ml, TLabel * sl){
            tmr = t;
            h_l = hl; m_l = ml; s_l = sl;
            tmr->Interval = 1000;
            SetTimer(0,0,0);
      }
 
      ~Timer(){ Stop(); }
      void SetAlertMes(AnsiString s){alert_mes = s;}
      void SetTimer(int h,int m,int s){
            hour = h;
            min = m;
            sec = s;
            h_s = 0; m_s = 0; s_s = 0;
            Stop();
      }
 
      void Start(void){ Started = true; tmr->Enabled = true;  }
 
      void Stop(void){ tmr->Enabled = false; Started = false;}
 
      void Tick(){
         if(Started)  {
           s_s++;
           if(s_s == 60) {
                  s_s = 0;
                  m_s++;
                  if(m_s == 60) {
                       m_s = 0;
                       h_s++;
                  }
           }
         h_l->Caption = IntToStr(h_s);
         m_l->Caption = ((m_s<10)?"0":"") + IntToStr(m_s);
         s_l->Caption = ((s_s<10)?"0":"") + IntToStr(s_s);
         if(h_s == hour && m_s == min && s_s == sec){Stop(); ShowMessage(alert_mes);}
         }
      }
};
 
Timer * tmr;
 
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    tmr = new Timer(Timer1,Label1,Label2,Label3);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
    delete tmr;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    if(tmr) tmr->Tick();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    tmr->SetTimer(0,0,10);
    tmr->SetAlertMes("Alert!");
    tmr->Start();   
}
1
 Аватар для Maskca
1 / 0 / 0
Регистрация: 15.12.2008
Сообщений: 97
20.04.2010, 19:30  [ТС]
Большое спасибо за программу, но у меня еще вопрос как сделать чтобы самому можно было задавать время вывода сообщения?
Что то вроди этого:
C++
1
tmr->SetTimer(0,0,Label4->Caption = "15");
0
 Аватар для [XandeR]
31 / 31 / 3
Регистрация: 18.03.2009
Сообщений: 381
Записей в блоге: 2
20.04.2010, 23:45
и у меня к месту есть вопрос:
Как запускать таймер при запуске bcb? мне просто нужно подсчитывать мое рабочее время
Ну или хотя бы запустить приложение таймера а при открытии bcb запустить таймер, возможно?
0
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
21.04.2010, 10:31
Maskca,
ну там же в программе есть пример
Так и задается время срабатывания таймера
C++
1
2
3
4
hour = 0;//часы
min = 0;//минуты
sec = 15; //секунды
tmr->SetTimer(hour,min,sec);
Можно бросить на форму 3 TEdit-a и брать значения оттуда, например: sec = Edit1->Text.ToInt();


[XandeR], возможно конечно...
Нужно найти окно Builder-a и запустить таймер.
Это можно сделать так:
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
bool CB_Finded = false;
bool CALLBACK EnumWindowsProc(HWND hWnd, TListView *ListView)
{
 AnsiString WindowName, ClassName;
 WindowName.SetLength(80);ClassName.SetLength(20);
 GetWindowText(hWnd, WindowName.c_str(), 80);
 GetClassName(hWnd, ClassName.c_str(), 20);
 if(ClassName.Pos("TAppBuilder") && WindowName.Pos("C++Builder"))
 {
     CB_Finded = true;
     return false;
 }
 return true;
}
 
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    if(!CB_Finded)EnumWindows((WNDENUMPROC)EnumWindowsProc,NULL);
    else if(tmr) tmr->Tick();
}
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    tmr = new Timer(Timer1,Label1,Label2,Label3);
    tmr->Start();
}
Только из класса Timer убрать строчку
C++
1
if(h_s == hour && m_s == min && s_s == sec){Stop(); ShowMessage(alert_mes);}
0
 Аватар для Maskca
1 / 0 / 0
Регистрация: 15.12.2008
Сообщений: 97
21.04.2010, 12:22  [ТС]
Спасибо я уже тоже догадался, я сделал min, sec, hour значениями AnsiString и задаю их значения через Label1->Caption;
Но у меня еще один вопрос как по окончании времени воспроизвести звук, что то вроди ээтого:
C++
1
tmr->PlaySound("zvyk.wav", 0, SND_ASYNC);
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
21.04.2010, 12:50
А так?


C++
1
2
 #include "MMSystem.HPP"
PlaySound("zvyk.wav", 0,SND_ALIAS | SND_ASYNC);
0
 Аватар для Maskca
1 / 0 / 0
Регистрация: 15.12.2008
Сообщений: 97
21.04.2010, 14:20  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
А так?


C++
1
2
 #include "MMSystem.HPP"
PlaySound("zvyk.wav", 0,SND_ALIAS | SND_ASYNC);
Дело не в этом, просто нужно это как то описать в классе timer, тоисть по оканчании времени должна срабатывать эта функция, а я не знаю как ее описать в класе
0
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
21.04.2010, 14:36
C++
1
2
3
4
5
if(h_s == hour && m_s == min && s_s == sec){
         Stop(); 
         ShowMessage(alert_mes);//показывает сообщение
         PlaySound("zvyk.wav", 0,SND_ALIAS | SND_ASYNC);//играет звук
}
0
 Аватар для Maskca
1 / 0 / 0
Регистрация: 15.12.2008
Сообщений: 97
21.04.2010, 16:28  [ТС]
Большое спасибо все получилось!!!
Но у меня есть вав файл на 300 кб и он почему то не проигрывается, а на 10 кб проигрывается, это существует какой то лимит по размеру, или качеству звука, или как?
0
 Аватар для [XandeR]
31 / 31 / 3
Регистрация: 18.03.2009
Сообщений: 381
Записей в блоге: 2
22.04.2010, 11:26
спасибо, но так не работает, вероятно проблема в этой строчке
C++
1
 if(ClassName.Pos("TAppBuilder") && WindowName.Pos("C++Builder"))
у меня bcb 2009, что тогда вписать?

Добавлено через 45 минут
не работает эта функция вобще, проверил, она не получает ни класса окна ни названия

Добавлено через 10 минут
все, сделал но другим путем
0
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
22.04.2010, 15:08
Это было для 2007...
Цитата Сообщение от XandeR Посмотреть сообщение
у меня bcb 2009, что тогда вписать?
Нужно посмотреть название оконного класса... и неизменяемый кусок из заголовка окна.

Цитата Сообщение от XandeR Посмотреть сообщение
Добавлено через 45 минут
не работает эта функция вобще, проверил, она не получает ни класса окна ни названия
Функция эта работает, и получает и название класса и заголовок окна тоже получает. Я тоже проверил.

Цитата Сообщение от XandeR Посмотреть сообщение
Добавлено через 10 минут
все, сделал но другим путем
Ну молодец... Так бы и сразу
0
 Аватар для [XandeR]
31 / 31 / 3
Регистрация: 18.03.2009
Сообщений: 381
Записей в блоге: 2
22.04.2010, 20:48
у меня не работает, проверял по разному, она должна показать класс и имя запущенного окна, которое запустилось или любое которое оказалось активным?
0
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
22.04.2010, 21:59
Цитата Сообщение от [XandeR] Посмотреть сообщение
у меня не работает, проверял по разному, она должна показать класс и имя запущенного окна, которое запустилось или любое которое оказалось активным?
И у тебя работает
Это же функция WINAPI... она везде работает... Эта функция перечисляет все оконные классы. Вызывая пользовательскую функцию. Почитай в мануале каком-нить.
А показать она ничего не должна. Она при совпадении названия класса и окна устанавливает флаг CB_Finded и все. Там вообще можно убрать проверку на название окна, тогда точно найдет любую версию... в 2010 название оконного класса тоже самое... Кстати в нем этот код тоже работает.
Только изменить немного надо для заголовка окна:
C++
1
if(ClassName.Pos("TAppBuilder") && (WindowName.Pos("C++Builder")||WindowName.Pos("RAD Studio")))
А проверить работает или нет очень просто, поставь брикпоинт на эту строчку и все увидишь
0
 Аватар для [XandeR]
31 / 31 / 3
Регистрация: 18.03.2009
Сообщений: 381
Записей в блоге: 2
23.04.2010, 00:36
блин я в caption окна выводил поочередно classname и WindowName так вот там ничего подобного как это не было TAppBuilder C++Builder

Добавлено через 45 секунд
показывать она может не должна но я её хорошо попросил чтобы проверить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.04.2010, 00:36
Помогаю со студенческими работами здесь

Таймер, вложенный в таймер
Доброго времени суток. Я новичек, С знаю плохо. Сделал небольшой проект на Arduino, но остался последний штрих: нужно таймер вложить в...

Звук и таймер - реализовать классы: "зв. сигал", "таймер" и "секундомер-сигнализатор"
Подскажите пожалуйста, дано задание реализовать классы: &quot;зв. сигал&quot;, &quot;таймер&quot; и &quot;секундомер-сигнализатор&quot;. Какие библиотеки...

Таймер
После выполнения подпрограммы выход из неё происходит в секцию Init, а не в rcall Timer. Где косяк ? .include &quot;m8def.yms&quot; ...

Таймер
И снова здравствуйте! Ребята, вот какой вопрос. Можно ли на каждый открытый документ навесить свой таймер? Событие таймера должно...

Таймер
Подскажите пожалуйста как можно сделать что бы таймер чаще срабатывал чем 1 сек. Допустим у меня есть картинка которая двигается по...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru