Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/92: Рейтинг темы: голосов - 92, средняя оценка - 4.89
8 / 8 / 1
Регистрация: 01.11.2010
Сообщений: 157
1

Таймер (выполнение кода через заданный промежуток времени)

18.03.2012, 02:23. Показов 17559. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, подскажите, как создать внутренний таймер, то есть через что бы через некоторое количество секунд, программа опять выполняла определенный код...
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.03.2012, 02:23
Ответы с готовыми решениями:

Выполнение действий через заданный промежуток времени
Нужен самый простой пример програмки на си++ (работаю в вижуал студио), которая будет каждый равный...

Определить сколько амёб будет через заданный промежуток времени, если известна скорость деления амёбы
Нужно решить задачу: Одноклеточная амёба каждые 3 часа делится на 2 клетки. Определите сколько...

Выполнение ruby кода через определенный промежуток времени
Нужно ежедневно выполнять определенный код. Использую гем whenever, но так и не понял как его...

Выполнить действие через заданный промежуток времени
Как сделать так, чтобы через каждый промежуток времени(15мин) выполнялось определённое действие?

8
Заблокирован
18.03.2012, 02:34 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
#pragma once
#include <iostream>
#include <Windows.h>
#include <process.h>
#include <stdio.h>
 
struct Time {
    int sec;
    int min;
    int hours;
};
 
class Timer {
private:
    bool worked;
    Time time;
public:
    Timer( );
    Timer( Time time );
    Timer( const Timer& timer );
 
    void SetTimer( Time time );
    void SetSec( int sec );
    void SetMin( int min );
    void SetHours( int hours );
    const Time GetTimer( ) const;
    const int GetSec( ) const;
    const int GetMin( ) const;
    const int GetHours( ) const;
    const bool GetWorked( ) const;
    void Reset( );
    void StartTimer( );
    void StopTimer( );
    void Print( ) const;
 
    ~Timer( );
 
    friend void TimeCount( void *param );
};
Добавлено через 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
116
117
118
119
#include "Timer.h"
 
Timer::Timer( ) {
    time.sec = 0;
    time.min = 0;
    time.hours = 0;
    worked = false;
}
Timer::Timer( Time time ) {
    this->time.sec = time.sec;
    this->time.min = time.min;
    this->time.hours = time.hours;
    worked = false;
}
Timer::Timer( const Timer& timer ) {
    this->time.sec = timer.time.sec;
    this->time.min = timer.time.min;
    this->time.hours = timer.time.hours;
    worked = false;
}
 
void Timer::SetTimer( Time time ) {
    this->time.sec = time.sec;
    this->time.min = time.min;
    this->time.hours = time.hours;
}
void Timer::SetSec( int sec ) {
    this->time.sec = sec;
}
void Timer::SetMin( int min ) {
    this->time.min = min;
}
void Timer::SetHours( int hours ) {
    this->time.hours = hours;
}
const Time Timer::GetTimer( ) const {
    return time;
}
const int Timer::GetSec( ) const {
    return time.sec;
}
const int Timer::GetMin( ) const {
    return time.min;
}
const int Timer::GetHours( ) const {
    return time.hours;
}
const bool Timer::GetWorked( ) const {
    return worked;
}
void Timer::Reset( ) {
    time.sec = 0;
    time.min = 0;
    time.hours = 0;
}
void Timer::Print( ) const {
    std::cout << time.hours << ":" << time.min << ":" << time.sec << std::endl;
}
void Timer::StartTimer( ) {
    worked = true;
    _beginthread( TimeCount, 0, ( void* ) this );
}
void Timer::StopTimer( ) {
    worked = false;
}
 
Timer::~Timer( ) {
    time.sec = 0;
    time.min = 0;
    time.hours = 0;
    worked = false;
}
 
void TimeCount( void *param ) {
    Timer *timer = ( Timer* ) param;
    DWORD startSec = 0, endSec = 0;
    while( true ) {
        // START COUNTING
        startSec = GetTickCount( );
        while( true ) {
            if( !timer->worked )  {
                _endthread( );
                break;
            }
            // END COUNTING
            endSec = GetTickCount( );
            if( ( endSec - startSec ) >= 923 ) {
                if( timer->time.sec > 0 ) {
                    timer->time.sec --;
                    break;
                }
                else {
                    // IF ( 0 == timer->time.sec )
                    if( ( 0 == timer->time.min ) && ( 0 == timer->time.hours ) ) {
                        timer->worked = false;
                        // if oll data == 0 - end thread
                        _endthread( );
                        break;
                    }
                    // ELSE IF ( 0 != timer->time.min == timer->time.hours )
                    timer->time.sec = 59;
                    if( timer->time.min > 0 ) {
                        timer->time.min --;
                        break;
                    }
                    else {
                        // IF ( 0 == timer->time.min )
                        timer->time.min = 59;
                        if( timer->time.hours > 0 ) {
                            timer->time.hours --;
                            break;
                        }
                        // HOURS HAVE NOT LIMIT
                    }
                }
            }
        }
    }
}
3
143 / 112 / 36
Регистрация: 14.04.2011
Сообщений: 261
18.03.2012, 02:36 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <ctime>
 
void timer(int);
 
int main ()
{
        timer(5);
 
        return 0;
}
 
void timer(int sec)
{
        clock_t wait;
        wait = clock() + sec * CLOCKS_PER_SEC;
        while (clock() < wait) {}
}
2
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
18.03.2012, 09:30 4
C++
1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
int main ()
{
//системная пауза в 5 секунд    
    system("pause 5");
return 0;
}
Добавлено через 21 минуту
Пардон. Глупость написал на счет pause...
Вот так нужно:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <Windows.h>
using namespace std;
int main ()
{
    //системная задержка в 5000 милисекунд    
    Sleep(5000);
     
    return 0;
}
1
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
18.03.2012, 10:25 5
Цитата Сообщение от R136a1 Посмотреть сообщение
while (clock() < wait) {}
Интересно сколько раз выполнится этот цикл, как его преобразует оптимизация и какова будет нагрузка на процессор
2
Заблокирован
18.03.2012, 11:28 6
Цитата Сообщение от fasked Посмотреть сообщение
Интересно сколько раз выполнится этот цикл, как его преобразует оптимизация и какова будет нагрузка на процессор
Насколько знаю - использование функции Sleep(int) подгружает проц по полной - но самое плохое это то, что программа настолько сильно будет виснуть, что конечный пользователь будет мягко говоря не очень обрадован ...
1
Фрилансер
3705 / 2077 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
18.03.2012, 20:27 7
Цитата Сообщение от Dmitry_gdv Посмотреть сообщение
Насколько знаю - использование функции Sleep(int) подгружает проц по полной
Тут Вы неправы. Я не поленился проверить, тем более, что много писать не надо.
C
1
2
3
4
5
6
#include <windows.h>
 
int main() {
    Sleep(25000);
    return 0;
}
Результат, как и ожидалось - все 25 секунд загрузка процессора - 0%

Цитата Сообщение от Dmitry_gdv Посмотреть сообщение
но самое плохое это то, что программа настолько сильно будет виснуть, что конечный пользователь будет мягко говоря не очень обрадован ...
Вы имеете в виду остановку цикла обработки сообщений? Это конечно, надо знать, что можно останавливать, а что нельзя
1
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
18.03.2012, 21:51 8
Цитата Сообщение от Dmitry_gdv Посмотреть сообщение
но самое плохое это то, что программа настолько сильно будет виснуть, что конечный пользователь будет мягко говоря не очень обрадован ...
Будет ожидать только один поток, к слову говоря.
0
Заблокирован
19.03.2012, 11:13 9
Хотел предупредить автора темы, что использование функции Sleep() в одном потоке с основными вычислениями грозит сильными тормозами ( Да - проц действительно не виснет, так как в принципе ему виснуть то не от чего, просто не так выразился ).
0
19.03.2012, 11:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2012, 11:13
Помогаю со студенческими работами здесь

Alarm не срабатывает через заданный промежуток времени
Всех приветствую. Мне нужно написать будильник. Для решения этой задачи я решил использовать класс...

Выполнение действия через промежуток времени
Как сделать так, чтобы при нажатии на кнопку(button1) выполнилось поочередно, с промежутком во...

Выполнение действия через промежуток времени
Как выполнять запрос webBrowser1.Navigate(&quot;https://www.youtube.com&quot;); Через каждые две...

Смена фонового изображение через заданный промежуток времени
Задача: Есть n изображений. Надо их по очереди прописывать в фон к body через n секунд.


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru