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

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

Войти
Регистрация
Восстановить пароль
 
akzolt
0 / 0 / 0
Регистрация: 16.07.2013
Сообщений: 27
#1

Нужно сделать таймер но не получается - C++

16.07.2013, 15:20. Просмотров 716. Ответов 10
Метки нет (Все метки)

Вообщем нужно выполнить команду (допустим Say("Hello world")) 3 раза с интервалом в 1 секунду. Я испробовал много способов, но не один не работает(пробовал таймеры и т.д). Sleep не предлагать, т.к он замораживает программу, а мне нужно чтобы программа работала без "зависаний". Надеюсь на вашу помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2013, 15:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Нужно сделать таймер но не получается (C++):

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

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

Сделать таймер как в Lost - C++
Подскажите где можно найти программу таймер как в сериале Лост, что б она требовала вводить код 4 8 15 16 23 42 каждые 108 минут Ну я...

Как сделать стабильный таймер в Windows XP,7,8 с задержкой в одну микросекунду? - C++
Собственно вопрос в топике, главное, чтоб таймер был стабилен и не скакал и чтоб задержка была в одну микросекунду. Тоесть возможно ли в...

Пожалуйста, нужно найти ошибки в этом коде, нужно сделать в Codeblocks! - C++
Задание было такое:Написать программу для работы с одномерным массивом размера N (0 < N < 100). В начале работы программы предложить...

Нужно сделать что бы давало рандомно числа и нужно написать ответ - C++
В командной строке. Тоесть примерно так: Запускаешь программу, показывает числа что выбрались рандомно : 15*3=? После этого...

10
Kastaneda
Jesus loves me
Эксперт С++
4749 / 2953 / 242
Регистрация: 12.12.2009
Сообщений: 7,490
Записей в блоге: 2
Завершенные тесты: 1
16.07.2013, 15:25 #2
Цитата Сообщение от akzolt Посмотреть сообщение
Sleep не предлагать, т.к он замораживает программу, а мне нужно чтобы программа работала без "зависаний".
Это как? Похоже тебе потоки надо использовать.
0
akzolt
0 / 0 / 0
Регистрация: 16.07.2013
Сообщений: 27
16.07.2013, 15:37  [ТС] #3
Цитата Сообщение от Kastaneda Посмотреть сообщение
Это как? Похоже тебе потоки надо использовать.
Можешь, пожалуйста, пример привести?
0
Kastaneda
Jesus loves me
Эксперт С++
4749 / 2953 / 242
Регистрация: 12.12.2009
Сообщений: 7,490
Записей в блоге: 2
Завершенные тесты: 1
16.07.2013, 15:38 #4
Пример чего?
0
Aleator
65 / 60 / 3
Регистрация: 04.05.2011
Сообщений: 1,221
16.07.2013, 15:40 #5
C++
1
clock () / x;
x - подобрать самому.
0
DiffEreD
1439 / 776 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
16.07.2013, 15:57 #6
Так?:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <chrono>
#include <thread>
 
void say()
{
   std::cout<<"Hello"<<std::endl;
}
 
int main(int argc, char** argv)
{
    size_t count = 3;
    while (count--)
    {
       std::this_thread::sleep_for(std::chrono::seconds(1));
       say();
    }
    
    return 0;
}
0
akzolt
0 / 0 / 0
Регистрация: 16.07.2013
Сообщений: 27
16.07.2013, 16:46  [ТС] #7
http://www.youtube.com/watch?v=EimmKkPX3dk
Залил видео. Первый вариант правильный, но я его не могу сделать. Сейчас попробую вариант выше.

Добавлено через 2 минуты
(29): fatal error C1083: Не удается открыть файл включение: chrono: No such file or directory
0
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
16.07.2013, 17:25 #8
Как вариант подключить хед Windows.
Команда Sleep(1000);
Допустим 5 секунд = 5000.
0
zss
Модератор
Эксперт С++
6859 / 6421 / 2146
Регистрация: 18.12.2011
Сообщений: 16,864
Завершенные тесты: 1
16.07.2013, 19:16 #9
Я бы создал win32 приложение на основе диалогового окна.
В сообщеннии WM_INITDIALOG запустил таймер командой SetTimer(hwnd,1,1000,NULL);
а в сообщении WM_TIMER запускал нужную команду и увеличивал счетчик.
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
#include <windows.h>
#include "resource.h"
int count=0;
int WINAPI fn(HWND hwnd,int cmd,WPARAM wp,LPARAM lp)
{
    switch(cmd)
    {
 
    case WM_INITDIALOG:
        SetTimer(hwnd,1,100,NULL);// запускаем таймер
        return 1;
    case WM_TIMER:
        {
            Say("Hello world"); // Выполняем нужную команду
            count++; // считаем
            if(count==3)KillTimer(hwnd,1); // останавливаем таймер
            return 1;
        }
    case WM_CLOSE:
        EndDialog(hwnd,0);// закрытие приложения, можно alt+F4
        return 1;
    case WM_COMMAND:
        return 0;// обрабатываемых кнопок и меню нет
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            BeginPaint(hwnd, &ps);// в окне ничего не рисуем
            EndPaint(hwnd, &ps);
            return 1;
        }
    }
    return 0;
}
int WINAPI WinMain(HINSTANCE hi,HINSTANCE,LPSTR,int) 
{
    return DialogBox(hi,"SIMPLE",NULL,(DLGPROC)fn); // открыть диалоговое окно, образец которого называется "SIMPLE"
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
16.07.2013, 21:07 #10
akzolt, лови
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
#include <ctime>
#include <cstring>
#include <cstdlib>
#include <iostream>
using namespace std;
 
int main()
{
    tm * ptm;
    time_t beg;
    time_t end;
 
    char * str;
    for(end = (beg = time(0)); true; end = time(0))
    {
        ptm = localtime(&end);
        str = asctime(ptm);
        if( strchr(str, '\n') )
            *strchr(str, '\n') = 0;
        cout<<"\r"<<str;
        if( end - beg )
            beg = end;
    }
    return 0;
}
http://codepad.org/py3700Zc
PS:О Program Idle следует позаботиться с помощью std::thread либо использовать человеческое API под NT (тем самым отказаться от кроссплатформенности кода выше в пользу снижения нагрузки на CPU).
1
Миниатюры
Нужно сделать таймер но не получается  
akzolt
0 / 0 / 0
Регистрация: 16.07.2013
Сообщений: 27
16.07.2013, 22:34  [ТС] #11
zss Спасибо огромное! Вот я переделал код, теперь работает! Дело в том, что я был в шаге от правильного решения, но потом пошёл в другом направлении.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int WINAPI tick(HWND hwnd,int cmd,WPARAM wp,LPARAM lp)
{
    if(count<2)
    {
        say(text);
        count++;
    }
    else
    {
        KillTimer(NULL,1);
        addMessageToChatWindow("Yeah");
    }
    return 0;
}
 
void cmd_func(  char *params )    
{   
    int    playerid = atoi(params);
    sprintf(text,"/pm Hello, %d",playerid);
        say(text);
    count=0;
    SetTimer(NULL,1,1300,(TIMERPROC)tick);
}
0
16.07.2013, 22:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 22:34
Привет! Вот еще темы с ответами:

Нужно сделать задание по c++! Через 3 часа нужно сдать! - C++
ТРЕБОВАНИЯ К ВЫПОЛНЕНИЮ ЗАДАНИЙ: Требования к выполнению задания №1: 1. Требуется решить систему линейных алгебраических...

даны 2 последовательности в файлах, в двух разных, нужно их обьединить и отсортировать по возрастанию. Но нужно сделать прогу с помошью указателей - C++
вот текст проги которую я сделал, но без указателей. переделайте пожалуйста #include&lt;fstream.h&gt; #include&lt;iostream.h&gt; void main(){ ...

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

.NET 3.x Нужно сделать таймер обратного отсчета - Visual Basic .NET
Нужно сделать таймер обратного отсчета


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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