Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 827
от 21.08.2007, 18:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 510, Экспертов: 72
В номере:Вопросов: 2, Ответов: 7


Вопрос № 98541: Здравствуйте, уважаемые Эксперты! Проблема такая: Есть цикл While и он бесконечен, нужно чтобы нажатие клавиши отрубала работающий цикл(цикл этот отправляет сигнал на девайс, своебразная система защиты) Обычные функции как cin, scanf и т.д. прер...
Вопрос № 98563: Здравствуйте. Подскажите, чему равно IOCTL_STORAGE_QUERY_PROPERTY?...

Вопрос № 98.541
Здравствуйте, уважаемые Эксперты!
Проблема такая: Есть цикл While и он бесконечен, нужно чтобы нажатие клавиши отрубала работающий цикл(цикл этот отправляет сигнал на девайс, своебразная система защиты) Обычные функции как cin, scanf и т.д. прерывают выполнение программы до ввода символов, мне же нужно чтобы цикл не прерывался, т.е. после каждой итерации цикла что-то проверяло нажата ли клавиша, если да то выйти, если нет то продолжать выполнение цикла. Возможно это решат 2 паралельно
запущенных процесса в одной программе? Возможно ли это сделать? Если да то как?
С уважением, Нурлан.
Отправлен: 15.08.2007, 19:00
Вопрос задал: Nyrlan Ilubaev (статус: 1-ый класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: 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!

Вариантов масса. :).
фактически тебе надо селать так, чтоб процесс отрубался при получении какого либа сигнала от другого процесса.

есть масса способов передачи данных между процессами.

http://www.frolov-lib.ru/books/bsp/v27/ch2.htm
http://www.frolov-lib.ru/books/bsp/v26/ch4.htm

читай тут как это сделать
Ответ отправил: 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
Здравствуйте, Spok!
Строка из файла ntddstor.h
#define IOCTL_STORAGE_QUERY_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
Ответ отправил: 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 куда-то все константы пропали...


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

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

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.56 beta от 20.08.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное