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

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте, господа.

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

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

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

Заранее благодарю за возможные ответы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2010, 17:01
Ответы с готовыми решениями:

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

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

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

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

15
257 / 144 / 18
Регистрация: 27.12.2009
Сообщений: 909
21.12.2010, 17:24 2
где хочешь использовать таймер? на форме или в консоле?
0
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
21.12.2010, 17:26  [ТС] 3
Если есть такая возможность, то в консоли.
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
21.12.2010, 17:37 4
YourLastSong, любые ф-ции ввода ждут ввода, таким образом посчитать сколько длится ожидание невозможно (правда я не знаю о каком таймере вы говорите, может какая-то левая библиотека умеет это делать). Могу предложить низкоуровневые API ввода\вывода. Через них можно даже нажатие и отпускание клавиши перехватить)

Не по теме:

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

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

Постарайтесь поискать, если не сложно, однако надо именно для консоли.
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
21.12.2010, 17:42 6
вот, там есть пример кода - к нему можно хоть таймер прикрутить, хоть вывод строки, если клавиша не нажата.

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

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

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

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

Код
'c' : undeclared identifier
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
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
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
21.12.2010, 19:14  [ТС] 10
А как сделать проверку на нажатие клавиши 'a' или 'b' в EventType==KEY_EVENT, не подскажете?

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

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

Добавлено через 14 часов 48 минут
Так сможет кто-нибудь помочь исправить, пожалуйста?
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
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
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
18.12.2012, 12:20 16
deleted

Не по теме:

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

0
18.12.2012, 12:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2012, 12:20
Помогаю со студенческими работами здесь

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

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

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

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


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

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