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

Проверка на нажатие клавиш - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сортировка квадратной матрицы по спирали http://www.cyberforum.ru/cpp-beginners/thread1051440.html
Дана последовательность чисел b1....bn.Получить квадратную матрицу порядка n,элементами которой являются числа, b1..bn в n-ной степени расположенные по схеме: .... помогите....есть кусочек кода но стыдно даже показывать. Помогитееее....
C++ Разработать функцию, определяющую, есть ли в строке S как минимум 5 подряд идущих латинских букв Разработать функцию Is5Latin(const S:string):boolean, определяющую, есть ли в строке S как минимум 5 подряд идущих латинских букв. С помощью данной функции вывести только такие строки из введенного набора, в которых есть по крайней мере 5 подряд идущих латинских букв. http://www.cyberforum.ru/cpp-beginners/thread1051436.html
Разложить sin^2 (x) в ряд Тейлора и вычислить сумму с заданной точностью C++
Здравствуйте, подскажите как можно вычислить sin^2 (x) = ∑ (-1)n * (22n-1 * x2n) / (2n)! . Число n от нуля до бесконечности. Программу составил такую, но получается так, что вычисляются большие числа. Как можно по другому реализовать sin^2 (x). int main() { double x, eps; cin >> x >> eps; double ch_r; // член ряда
Определить среднее арифметическое кодов символов в строке S C++
Разработать функцию Mean(const S:string):integer, определяющую среднее арифметическое кодов символов в строке S (дробную часть отбросить). С помощью данной функции вывести только такие строки из введенного набора, у которых среднее арифметическое кодов символов не меньше 70.
C++ Каждую латинскую букву, идущую после пробела, заменить на большую http://www.cyberforum.ru/cpp-beginners/thread1051432.html
Разработать функцию Change(const S:string):string, возвращающую строку, в которой каждая латинская буква, идущая после пробела, заменяется на большую. С помощью данной функции у каждой строки из введенного набора заменить латинские буквы, идущие после пробела, на большие.
C++ Парсинг xml При написание парсера возникла проблема, как интерпретировать следующий xml <?xml version="1.0" ?> <note item="description"> line1 <line2>Данные</line2> <!--comment--> </note> Собственно вопрос как надо реагировать на line1? Просто игнорировать, трактовать как данные вложенные в note или еще как? Если не сильно ошибаюсь то xml что то типа дерева где данные могут... подробнее

Показать сообщение отдельно
imkerya
1 / 1 / 0
Регистрация: 18.12.2013
Сообщений: 12
24.12.2013, 23:20  [ТС]     Проверка на нажатие клавиш
В общем, поковырял немного предыдущий пример. Так и не разобрался.
Но в общем-то довел кое-что другое.
Логика работы должна быть такая:
C
1
2
3
4
        
fun_1();
while (GetAsyncKeyState(13)){}
fun_2();
Меня смущает только то, что строка с оператором while(пока удерживается Enter), приложение грузит ЦП на 25%. Можно ли этот момент как-либо оптимизировать?

Добавлено через 13 минут
Попробовал значит так:
C
1
2
3
4
5
6
7
        
fun_1();
while (GetAsyncKeyState(13))
{
    Sleep(1);
}
fun_2();
Машина грузиться перестала вовсе, и работает точно так же, без задержек. Что скажете?

Добавлено через 16 часов 56 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
while (true)
{
    a = _getch();
    if (a == 13)
    {
        fun_1();
        while (GetAsyncKeyState(13))
        {
            Sleep(1);
        }
        fun_2();
    }
}
В этом случае, всё работает, если клавиша Enter нажата не дольше ~0.5 сек.
Работает функция 1, отпускаю - вызывается функция 2.
Если Enter держать дольше ~0.5сек, то функция 2 вызывается 2 раза. Кто может помочь?

Добавлено через 6 часов 42 минуты
Со всем разобрался. Прикладываю пример рабочего кода.
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>
using namespace std;
 
void main()
{
    bool x = true;
    while (x)
    {
        if (GetAsyncKeyState(VK_RETURN))
        {
            cout << "Enter..DOWN" << endl;
            while (GetAsyncKeyState(VK_RETURN))
                Sleep(1);
            cout << "Enter..UP" << endl;
        }
        if (GetAsyncKeyState(VK_ESCAPE))
            x = false;
        Sleep(1);
    }
    system("pause");
}
 
Текущее время: 04:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru