Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
YourLastSong
1 / 1 / 4
Регистрация: 12.12.2010
Сообщений: 112
#1

Как использовать таймер - C++

21.12.2010, 17:01. Просмотров 1931. Ответов 15
Метки нет (Все метки)

Здравствуйте, господа.

Можно ли каким-либо образом использовать таймер в программе вообще?

Увидел описание таймера, однако не нашёл timer.h.

Мне необходимо, чтобы программа в том случае, если пользователь ничего не делает опр. промежуток времени в течение getch (), выдавала сообщение.

Заранее благодарю за возможные ответы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2010, 17:01
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как использовать таймер (C++):

Использовать время (таймер) в С++ консоль
Добрый вечер! Задача такая: есть несколько сортировок (пузырьком, быстрой,...

Оставить все как есть || использовать парсер xml || или использовать struct
Собственно имеется код... #include <io.h> #include <string> #include...

Как организовать таймер?
Как мне в VC++ организовать таймер, задержку или что то в этом роде......

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

Как сделать таймер
Я хочу сделать таймер который будет отсчитывать 20 секунд и если пользователь...

Как подключить таймер к игре?
Как подключить таймер к игре чтоб она выключалась после конца времени ?

15
cibertronic
256 / 143 / 17
Регистрация: 27.12.2009
Сообщений: 908
21.12.2010, 17:24 #2
где хочешь использовать таймер? на форме или в консоле?
0
YourLastSong
1 / 1 / 4
Регистрация: 12.12.2010
Сообщений: 112
21.12.2010, 17:26  [ТС] #3
Если есть такая возможность, то в консоли.
0
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
21.12.2010, 17:37 #4
YourLastSong, любые ф-ции ввода ждут ввода, таким образом посчитать сколько длится ожидание невозможно (правда я не знаю о каком таймере вы говорите, может какая-то левая библиотека умеет это делать). Могу предложить низкоуровневые API ввода\вывода. Через них можно даже нажатие и отпускание клавиши перехватить)

Не по теме:

ща тему найду, когда с АПИ разбирался, как раз что-то похожее спрашивал.

0
YourLastSong
1 / 1 / 4
Регистрация: 12.12.2010
Сообщений: 112
21.12.2010, 17:40  [ТС] #5
Да, точно, про это я не подумал как-то.

Постарайтесь поискать, если не сложно, однако надо именно для консоли.
0
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
21.12.2010, 17:42 #6
вот, там есть пример кода - к нему можно хоть таймер прикрутить, хоть вывод строки, если клавиша не нажата.

Добавлено через 20 секунд
Цитата Сообщение от YourLastSong Посмотреть сообщение
надо именно для консоли
оно самое)

Добавлено через 46 секунд
в 5-ом посте рабочий вариант кода.
0
cibertronic
256 / 143 / 17
Регистрация: 27.12.2009
Сообщений: 908
21.12.2010, 17:45 #7
тут была тема, найти не могу, короче там отсчет начинается сразу после пуска программы(обращаясь к системному), далее если небыло использование никакой функции, после определенного времени, например 10 минут, срабатывает функция exit(0);

жестко, но работало....

может и не в этом форуме... чет найти не могу...
0
YourLastSong
1 / 1 / 4
Регистрация: 12.12.2010
Сообщений: 112
21.12.2010, 17:50  [ТС] #8
Выдаётся вот такое сообщение:

Код
'c' : undeclared identifier
0
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
21.12.2010, 17:59 #9
Вот то, что вам нужно:
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
#include <iostream> 
#include <windows.h>
using namespace std;
void MyGetch();
const int C=20;
int main() {
   cout<<"Press any key..."<<endl;
   MyGetch();
   system("pause");
   return 0;
}
void MyGetch(){
    HANDLE hstd=GetStdHandle(STD_INPUT_HANDLE);
    INPUT_RECORD IR[C];
     DWORD read;
     while(PeekConsoleInputA(hstd,IR,C,&read)){
             Sleep(1000);//здесь можно задавать время
             bool F=false;
             for(int i=0;i<read;i++){
                 if(IR[i].EventType==KEY_EVENT){
                     F=true;
                     break;}        
             }
             if(F)break;
             else cout<<"Don't be stupid!"<<endl;
     }
}
0
YourLastSong
1 / 1 / 4
Регистрация: 12.12.2010
Сообщений: 112
21.12.2010, 19:14  [ТС] #10
А как сделать проверку на нажатие клавиши 'a' или 'b' в EventType==KEY_EVENT, не подскажете?

Понял только, как для пробела сделать, но мне необходимо использовать нажатие клавиш 'a' или 'b' сейчас.
0
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
21.12.2010, 19:27 #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void MyGetch(){
    HANDLE hstd=GetStdHandle(STD_INPUT_HANDLE);
    INPUT_RECORD IR[C];
     DWORD read;
     while(PeekConsoleInputA(hstd,IR,C,&read)){
             Sleep(1000);
             bool F=false;
             for(int i=0;i<read;i++){
                 if(IR[i].EventType==KEY_EVENT){
                    if(IR[i].Event.KeyEvent.wVirtualKeyCode==0x41)
                     cout<<"You press a";
                    if(IR[i].Event.KeyEvent.wVirtualKeyCode==0x42)
                     cout<<"You press b";
                     F=true;
                     break;}        
             }
             if(F)break;
             else cout<<"Don't be stupied!"<<endl;
     }
}
0
YourLastSong
1 / 1 / 4
Регистрация: 12.12.2010
Сообщений: 112
21.12.2010, 19:53  [ТС] #12
Код
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <windows.h>

using namespace std;

int x;
const int C=20;
char c;

void main()
{
	cout << "a - start" << endl << "b - quit";
	HANDLE hstd=GetStdHandle(STD_INPUT_HANDLE);
    INPUT_RECORD IR[C];
     DWORD read;
     while(PeekConsoleInputA(hstd,IR,C,&read)){
			 a1:
             Sleep(1);
			 x++;
             bool F=false;
             for(int i=0;i<read;i++){
                 if(IR[i].EventType==KEY_EVENT){
				 if(IR[i].Event.KeyEvent.wVirtualKeyCode==0x41)
                     system("cls");
                    if(IR[i].Event.KeyEvent.wVirtualKeyCode==0x42)
                     exit (EXIT_SUCCESS);
                     break;}        
             }
			 if (x > 8000)
			 {
			 cout << endl << endl << "You need to choose one of this menu points" << endl;
			 getch ();
			 x = 0;
			 goto a1;
			 }
     }
Большое спасибо.

Однако в том случае, если нажать любой другой символ, те символы распознаваться уже не будут вообще. Как это можно исправить?
0
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
21.12.2010, 20:06 #13
можно сделать отдельную ф-цию (как у меня в коде), и там сделать так, чтоб ф-ция возвращала прочитанный символ.
0
YourLastSong
1 / 1 / 4
Регистрация: 12.12.2010
Сообщений: 112
22.12.2010, 22:22  [ТС] #14
Попробовал, не получилось почему-то.

Сможете показать у меня на примре, как это можно сделать, пожалуйста?

Добавлено через 14 часов 48 минут
Так сможет кто-нибудь помочь исправить, пожалуйста?
0
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
23.12.2010, 15:14 #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <Windows.h>
char MyGetch();
int main(){
    char a;
    a=MyGetch();
    std::cout<<"Function \"MyGetch()\" return "<<a<<std::endl;
    return 0;
}
char MyGetch(){
    const int C=20;
    HANDLE hstd=GetStdHandle(STD_INPUT_HANDLE);
    INPUT_RECORD IR[C];
    DWORD read;
     while(PeekConsoleInputA(hstd,IR,C,&read)){
             for(int i=0;i<read;i++)
                 if(IR[i].EventType==KEY_EVENT&&isprint(int(IR[i].Event.KeyEvent.wVirtualKeyCode)))
                    return IR[i].Event.KeyEvent.wVirtualKeyCode;  
            Sleep(1000);     
            std::cout<<"Don't be stupied!"<<std::endl;
     }
}
1
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
18.12.2012, 12:20 #16
deleted

Не по теме:

вообще в другую тему писал

0
18.12.2012, 12:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2012, 12:20
Привет! Вот еще темы с решениями:

Как написать свой таймер?
Чтобы функция выполнялась скажем каждые 200 миллисекунд. Сейчас WM_TIMER делает...

Как реализовать таймер на форме
Есть форма на которой должен быть визуальный таймер обратного отсчета, по...

Сделать таймер как в Lost
Подскажите где можно найти программу таймер как в сериале Лост, что б она...

Как реализовать таймер в консольном приложении?
И как-нибудь без while и sleep, чтобы программа не висела. Пытался делать через...


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

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

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