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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
#1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Не по теме:

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

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

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

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

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

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

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

Код
'c' : undeclared identifier
0
Kastaneda
Нарушитель
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,314
Записей в блоге: 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 / 0
Регистрация: 12.12.2010
Сообщений: 112
21.12.2010, 19:14  [ТС] #10
А как сделать проверку на нажатие клавиши 'a' или 'b' в EventType==KEY_EVENT, не подскажете?

Понял только, как для пробела сделать, но мне необходимо использовать нажатие клавиш 'a' или 'b' сейчас.
0
Kastaneda
Нарушитель
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,314
Записей в блоге: 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 / 0
Регистрация: 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
Нарушитель
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,314
Записей в блоге: 2
Завершенные тесты: 1
21.12.2010, 20:06 #13
можно сделать отдельную ф-цию (как у меня в коде), и там сделать так, чтоб ф-ция возвращала прочитанный символ.
0
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
22.12.2010, 22:22  [ТС] #14
Попробовал, не получилось почему-то.

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

Добавлено через 14 часов 48 минут
Так сможет кто-нибудь помочь исправить, пожалуйста?
0
Kastaneda
Нарушитель
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,314
Записей в блоге: 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
23.12.2010, 15:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2010, 15:14
Привет! Вот еще темы с ответами:

Как написать свой таймер? - C++
Чтобы функция выполнялась скажем каждые 200 миллисекунд. Сейчас WM_TIMER делает это, но он не подходит. Искал по многим запросам в гугле и...

Как реализовать таймер в консольном приложении? - C++
И как-нибудь без while и sleep, чтобы программа не висела. Пытался делать через winapi, но не понял как функцию, выполняемую при &quot;тикании&quot;...

Пузырьковая сортировка. Как реализовать таймер - C++
Пузырьковая сортировка. Как реализовать таймер? #include &lt;vcl.h&gt; #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #pragma hdrstop ...

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


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

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

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