Вопрос № 98541: Здравствуйте, уважаемые Эксперты!
Проблема такая: Есть цикл While и он бесконечен, нужно чтобы нажатие клавиши отрубала работающий цикл(цикл этот отправляет сигнал на девайс, своебразная система защиты) Обычные функции как cin, scanf и т.д. прер...Вопрос № 98563: Здравствуйте.
Подскажите, чему равно IOCTL_STORAGE_QUERY_PROPERTY?...
Вопрос № 98.541
Здравствуйте, уважаемые Эксперты!
Проблема такая: Есть цикл While и он бесконечен, нужно чтобы нажатие клавиши отрубала работающий цикл(цикл этот отправляет сигнал на девайс, своебразная система защиты) Обычные функции как cin, scanf и т.д. прерывают выполнение программы до ввода символов, мне же нужно чтобы цикл не прерывался, т.е. после каждой итерации цикла что-то проверяло нажата ли клавиша, если да то выйти, если нет то продолжать выполнение цикла. Возможно это решат 2 паралельно
запущенных процесса в одной программе? Возможно ли это сделать? Если да то как?
С уважением, Нурлан.
Отвечает: Sergey A. Wedensky
Здравствуйте, Nyrlan Ilubaev!
Если речь о DOS-подобной программе или консоли (судя по cin и scanf) - есть функция kbhit, определяющая есть что в буфере клавиатуры. По итогам ее вызова можно уже вытаскивать код символа.
Ответ отправил: Sergey A. Wedensky (статус: Студент)
Ответ отправлен: 15.08.2007, 19:52 Оценка за ответ: 5
Отвечает: Aristos
Здравствуйте, Nyrlan Ilubaev!
Для определения нажата ли клавиша подходит функция _kbhit(). Считать клавишу можно с помощью функций _getch() или _getche(). Эти функции объявлены в заголовочном файле <conio.h>.
Приложение:
Ответ отправил: Aristos (статус: 3-ий класс)
Ответ отправлен: 16.08.2007, 00:08 Оценка за ответ: 5
Отвечает: Новиков Андрей Викторович
Здравствуйте, Nyrlan Ilubaev!
Наиболее продуктивно было бы использовать потоки.
Ниже пример использования потоков.
Приложение:
Ответ отправил: Новиков Андрей Викторович (статус: 1-ый класс)
Ответ отправлен: 16.08.2007, 08:53 Оценка за ответ: 5
Отвечает: Sema
Здравствуйте, Nyrlan Ilubaev!
Вариантов масса. :).
фактически тебе надо селать так, чтоб процесс отрубался при получении какого либа сигнала от другого процесса.
есть масса способов передачи данных между процессами.
Ответ отправил: Sema (статус: 3-ий класс)
Ответ отправлен: 16.08.2007, 09:02 Оценка за ответ: 5
Отвечает: Rockie
Здравствуйте, Nyrlan Ilubaev!
В поставку компилятора от Borland есть файл conio.h . В нем есть функция getch(), думаю это наиболее простое решение. Эта функция не входит в стандарт, но она поддерживается современными компиляторами(в том числе MSVS 2005). Вот простенький пример, выводящий символы на экран. по пробелу происходит переход на следующую строку, по нажатию esc - выход из программы.
Подробнее описание getch() можно посмотреть тут
http://www.codenet.ru/progr/cpp/spru/getch.php
и в msdn
Приложение:
Ответ отправил: Rockie (статус: 1-ый класс)
Ответ отправлен: 16.08.2007, 14:22 Оценка за ответ: 5
Вопрос № 98.563
Здравствуйте.
Подскажите, чему равно IOCTL_STORAGE_QUERY_PROPERTY?
Отправлен: 16.08.2007, 00:02
Вопрос задал: Spok (статус: Студент)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Ответ отправил: Aristos (статус: 3-ий класс)
Ответ отправлен: 16.08.2007, 00:18 Оценка за ответ: 5 Комментарий оценки: Как ни странно, спустя ещё три часа поисков я нашёл сию дефиницию. А числом - это сколько?
Отвечает: Rockie
Здравствуйте, Spok!
Например здесь
http://www.gotdotnet.ru/Forums/Common/28266.aspx
можно найти такую строку:
const int IOCTL_STORAGE_QUERY_PROPERTY = 0x002d1400;
Для поиска по исходным кодам попробуйте заюзать
http://www.google.com/codesearch
возможно поможет.
Ответ отправил: Rockie (статус: 1-ый класс)
Ответ отправлен: 16.08.2007, 14:38 Оценка за ответ: 5 Комментарий оценки: Sorry, нет ничего под рукой, а из MSDN куда-то все константы пропали...