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

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

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

Все не получается сделать C++
Как сделать стабильный таймер в Windows XP,7,8 с задержкой в одну микросекунду? C++
Сделать таймер как в Lost C++
даны 2 последовательности в файлах, в двух разных, нужно их обьединить и отсортировать по возрастанию. Но нужно сделать прогу с помошью указателей C++
C++ Нужно сделать что бы давало рандомно числа и нужно написать ответ
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
16.07.2013, 15:25     Нужно сделать таймер но не получается #2
Цитата Сообщение от akzolt Посмотреть сообщение
Sleep не предлагать, т.к он замораживает программу, а мне нужно чтобы программа работала без "зависаний".
Это как? Похоже тебе потоки надо использовать.
akzolt
0 / 0 / 0
Регистрация: 16.07.2013
Сообщений: 27
16.07.2013, 15:37  [ТС]     Нужно сделать таймер но не получается #3
Цитата Сообщение от Kastaneda Посмотреть сообщение
Это как? Похоже тебе потоки надо использовать.
Можешь, пожалуйста, пример привести?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
16.07.2013, 15:38     Нужно сделать таймер но не получается #4
Пример чего?
Aleator
 Аватар для Aleator
66 / 66 / 3
Регистрация: 04.05.2011
Сообщений: 1,142
16.07.2013, 15:40     Нужно сделать таймер но не получается #5
C++
1
clock () / x;
x - подобрать самому.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 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;
}
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
Bend3r
 Аватар для Bend3r
142 / 129 / 17
Регистрация: 29.07.2012
Сообщений: 681
16.07.2013, 17:25     Нужно сделать таймер но не получается #8
Как вариант подключить хед Windows.
Команда Sleep(1000);
Допустим 5 секунд = 5000.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 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"
}
-=ЮрА=-
Заблокирован
Автор 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).
Миниатюры
Нужно сделать таймер но не получается  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 22:34     Нужно сделать таймер но не получается
Еще ссылки по теме:

как сделать таймер? C++
Нужно сделать задание по c++! Через 3 часа нужно сдать! C++

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

Или воспользуйтесь поиском по форуму:
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);
}
Yandex
Объявления
16.07.2013, 22:34     Нужно сделать таймер но не получается
Ответ Создать тему
Опции темы

Текущее время: 12:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru