Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Katy13
Сообщений: n/a
#1

Интервальный таймер - C++

22.03.2011, 17:50. Просмотров 1481. Ответов 3
Метки нет (Все метки)

Добрый вечер. Мне очень нужна помощь в решении задачи на С++.
1) Должен быть метод, реализующий _один_ шаг работы таймера. Возвращать должен текущее состояние выхода (0 если счетчик не равен нулю, 1 если равен), при достижении счетчиком значения 0 он должен перезапускаться.
2) Соответственно, должны быть методы для установки интервала (максимального значения счетчика), его сброса, остановки и запуска, все это в одном классе.

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

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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <windows.h>
#include <iostream>
 
using namespace std;
 
class timer                                     //класс таймера
{
    LARGE_INTEGER start;                        //начальное время
    double freq;                                //частота таймера
    double tick_len;                            //длина тика
    double current_time;                        //текущее время
    double last_time;                           //предыдущее время
    void init();                                //инициализация
    double get_freq();                          //частота таймера    
public:
    double need_time;                           //необходимое время
    void stop_timer();                          //остановка таймера
    int step_timer();                           //шаг работы
    void start_timer(int);                      //старт таймера
    void update_timer(int);                     //обновление
    double read_timer();                        //вернуть время (от начального времени)
};
 
 
//инициализация
void timer::init()
{
    freq = get_freq();
    tick_len = 1.0 / freq;
}
 
//частота таймера
double timer::get_freq()
{
    LARGE_INTEGER fr;
    if (!QueryPerformanceFrequency(&fr))        
        return  0;
    return (double)fr.QuadPart;
}
 
//вернуть время (от начального времени)
double timer::read_timer()
{
    DWORD_PTR oldMask = SetThreadAffinityMask(GetCurrentThread(),  0); //использовать только первое ядро процессора
    LARGE_INTEGER current_time;                                              //засечь текущее время
    QueryPerformanceCounter(&current_time);                                  //восстановить маску использования ядер процессора
    SetThreadAffinityMask(GetCurrentThread(), oldMask);                      //вернуть текущее время
    return (current_time.QuadPart - start.QuadPart) * tick_len;
}
 
//старт таймера
void timer::start_timer(int nt)
{
    init();
    DWORD_PTR oldMask = SetThreadAffinityMask(GetCurrentThread(),  0); //вот этого куска кода и тот который выше недолжно быть
    QueryPerformanceCounter(&start);
    SetThreadAffinityMask(GetCurrentThread(), oldMask);
    last_time = current_time = read_timer();
    need_time = nt;
    cout << "start_timer()\n";
}
 
//обновить таймер
void timer::update_timer(int nt)
{
    last_time = current_time;
    current_time = read_timer();
    start_timer(nt);
    cout << "update_timer()\n";
}
 
//остановить таймер
void timer::stop_timer()
{
    current_time = 0;
    need_time = 0;
    last_time = 0;
    cout << "stop_timer()\n";
}
 
//метод, реализующий один шаг работы таймера
int timer::step_timer()
{
    if(need_time - read_timer() >= 0)
        return 0;
    else
        return 1;
}
 
int main()
{
    timer mytimer;
 
    mytimer.start_timer(10);        //старт таймера с указанным временем
    while(!mytimer.step_timer())
    {
        cout << mytimer.need_time-(int)mytimer.read_timer() << "\n";
        system("cls"); 
    };
 
    mytimer.update_timer(4);       //обновление времени и рестарт таймера с новым временем
    
    while(!mytimer.step_timer())
    {
        cout << mytimer.need_time-(int)mytimer.read_timer() << "\n";
        system("cls");
    };
 
    mytimer.update_timer(5);
    mytimer.stop_timer();          //остановка таймера
 
 
    system("PAUSE");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2011, 17:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Интервальный таймер (C++):

Интервальный тип - C++
Можно ли на С++ создать интервальный тип, как на Delphi? например var year: 1930..2000;

unordered_multimap - интервальный конструктор - C++
Как можно воспользоваться интервальным конструктором для unordered_multimap в таком вот коде:#include &lt;iostream&gt; #include &lt;string&gt; ...

Таймер c++ - C++
как создать таймер в с++ ? чтоб с каждой секундой переменная увеличивалась на 1 или каждую секунду выводилось какое-либо сообщение. ...

Таймер на С/С++ - C++
Всем доброго времени суток. Есть такой вопрос. Как написать на С/С++ таймер который будет выполнять какой то участок кода через на пример 5...

таймер c++ - C++
Всем привет. Прошу вас помочь мне в слудующем: нужен простой таймер(среда visual c++ express выпуск),который отключит вот эту функцию...

Таймер - C++
Господа знатоки,прошу помощи: Нужно реализовать таймер при запуске нужной функции: Класс class Game { protected: clock_t...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
22.03.2011, 18:58 #2
Цитата Сообщение от Katy13 Посмотреть сообщение
Код программы есть, но он очень ненравиться моему преподу...нужно что было попроще и поменьше
более вероятно, что ты попросту не смогла объяснить ему, как этот код работает.
0
Katy13
Сообщений: n/a
22.03.2011, 19:27 #3
Если бы он спрашивал меня..Он мне сказал что нельзя использовать библиотеку windows, и что он у меня её принимать не будит так как мы так не пишим. Я уже запарилась ему сдавать, из за него на второй год осталась.
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
22.03.2011, 19:31 #4
используй функцию clock из time.h
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2011, 19:31
Привет! Вот еще темы с ответами:

таймер - C++
извините , я знаю что уже миллион раз спрашивали это но подскажите обычный таймер в С++ не винапи а просто в С++ и как чтобы обнавлялась...

таймер - C++
Функцию надо вызывать каждую минуту. Название функции void xxx(). Как сделать с помощью settimer, ну то есть вызвать таймер

таймер - C++
Мне нужно написать программу которая будет по таймеру выписывать сообщение к примеру. В общем мне интересна работа с таймером.

Таймер - C++
То-ли я кривой, то-ли лыжы не едут. Чё за фигня? Таймер не работает... POINT previousPoint, currentPoint; bool mouseDown; HPEN myPen; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.03.2011, 19:31
Ответ Создать тему
Опции темы

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