С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
11 / 10 / 3
Регистрация: 15.11.2015
Сообщений: 250

C++ прерывания

23.08.2016, 15:06. Показов 2460. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, если кто знает)))

У меня программа в DOS, считывает данные с омметра и выводит их на консоль, в постоянном режиме.
Но стоит только окно DOS сместить в сторону (мышью), и поступающие данные не считываются, считывание
прекращается в момент движения окна DOS, в момент остановки окна, данные опять читаются.
Т.е оператор работающий с программой, тем самым вызывает ошибку программы.
(расскрыть DOS на весь экран нельзя, т.к нужно одновременно два таких окна, в другое окно другие данные).

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

Пожалуйста подскажите, как можно избавиться от такой ошибки. При помощи прерываний или может потоков???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.08.2016, 15:06
Ответы с готовыми решениями:

как перехватить прерывания в VC?
Помогите пожалуйста перехватить прерывания в VC6.0. Может есть какие-то API функции? Нужно перехватить прерывания 21h и создать собственный...

Прерывания в ОСи: прототип функции-обработчика
Как реализовать прерывания на C++. Какой должен быть прототип функции-обработчика. Как делать выход из обработчика. Mожет callback надо...

Приложение не завершается после прерывания отладки (VS C++6.0 + Windows 7 (64))
Добрый день! Подобный вопрос я задавал в разделе .НЕТ, но там я грешил на Сш. Теперь мне стало понятно, что проблема во взаимодействии...

12
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
24.08.2016, 11:01
maxika, может окно "командной строки"?
Почему вы думаете, что это действие вызывает ошибку?
Может при перетаскивании данные просто не отображаются?
Желательно глянуть исходный код (если обнородование его не желательно, в подписи моя почта).
0
11 / 10 / 3
Регистрация: 15.11.2015
Сообщений: 250
25.08.2016, 07:43  [ТС]
Программу делаю в Builder C++ 6, т.е программа консольного приложения в Билдере.

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

Сейчас на данный момент пришла мысль))))
Не сразу считывать поступающие данные от оборудования на плату. А сперва их (данные) помещать
в память платы и уже от туда их считывать.

Пожалуйста подскажите, вообще я в правильном направлении думаю?????
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
25.08.2016, 10:02
Цитата Сообщение от maxika Посмотреть сообщение
Ошибка, потому что данные не считываются с портов платы
maxika, по идее использование 2-го потока должно помочь, но лучше глянуть исходники.
0
11 / 10 / 3
Регистрация: 15.11.2015
Сообщений: 250
25.08.2016, 13:46  [ТС]
Пожалуйста посмотрите, я загрузил программу, она в сильно сокращенном виде, только самое основное, но это все равно рабочий вариант. Смысл программы:
Идет замер сопротивления резисторов, с начало в холодном состоянии, потом в горячем (их нагревают).
Потом по полученным данным, рассчитывается ТКС (температурный коэффициент сопротивления).
Все полученные результаты выводятся на консоль и резисторы сортируются на хорошие и плохие (брак).

На рабочем столе, запускаются два консольных приложения, на два оборудования (измеряющих сопротивления).
Если начать водить консольное окно, мышью в сторону, программа не читает в этот момент
данные которые поступают на плату (плата PEX-D24). Данная погрешность недопустима, потому что работающий
оператор на оборудовании, водит консольные окна для своего удобства (типо ему, так лучше видно).

Вот и не знаю пока, как убрать эту погрешность(((((
Вложения
Тип файла: 7z PEX-D24.7z (19.3 Кб, 9 просмотров)
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
25.08.2016, 14:15
maxika, строка 62, Unit1.cpp, попробуйте заменить:

C++
1
while( !GetAsyncKeyState(VK_END) )
на
C++
1
for(;;)
а выходить из программы можно с помощью Ctrl+C.
0
11 / 10 / 3
Регистрация: 15.11.2015
Сообщений: 250
25.08.2016, 15:36  [ТС]
Нет предложенный способ не помогает, в этом легко убедиться, если использовать следующее выражение и при этом начать двигать консоль.
C++
1
2
3
for(int i=0; i<20; i++){
cout<<"qwert"<<endl;
Sleep(500);}
Видно что вывод данных приостанавливается при движении консоли.
Думаю уже, что может попробовать отправлять данные в память платы, типо FIFO- первым пришел, первым ушел.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.08.2016, 16:26
Создай тему в ветке С++ для начинающих, там быстрее подскажут.

Добавлено через 7 минут
Или напиши в личку этому специалисту: https://www.cyberforum.ru/members/374580.html
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
25.08.2016, 20:32
maxika, а программа обязательно должна быть консольная? Создайте форму, киньте на нее TMemo, и выводите показания в нее одновременно двигая окно. Это как вариант...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
26.08.2016, 12:39
Цитата Сообщение от maxika Посмотреть сообщение
Программу делаю в Builder C++ 6
", но тему создаю в Visual C++. А потом еще удивляюсь, с чего это никто не отвечает." Логично, жди дальше...
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
27.08.2016, 21:10
Цитата Сообщение от volvo Посмотреть сообщение
но тему создаю в Visual C++
Цитата Сообщение от maxika Посмотреть сообщение
У меня программа в DOS
...
0
11 / 10 / 3
Регистрация: 15.11.2015
Сообщений: 250
28.08.2016, 12:39  [ТС]
Нет смысла придираться к словам, если алгоритм решения во всех случаях одинаков))))
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
28.08.2016, 12:44
В том то вся и проблема, что алгоритм решения ОЧЕНЬ отличается в зависимости
1) от ОС, под которую пишется программа
2) от используемого инструментария (компилятора)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.08.2016, 12:44
Помогаю со студенческими работами здесь

использование прерывания 21h для считывания с клавиатуры
Разработать, написать и отладить программу управления перемещением символа (например, &quot;*&quot;) в пределах заданного на экране окна.

Почему не устанавливаются точки прерывания при удалённой отладке?
Отлаживаю удалённо на виртуальной машине под W7. Настроил, скопировал проект с .pdb файлами на отладочную машину, запустил приложение на...

[Вопрос] Перехват прерывания прямым доступом к вектору прерывания
Всех приветствую! В данный момент разбираюсь с обработкой аппаратного прерывания (прерывание таймера 08h и 1Ch, -//- клавиатуры 09h). ...

Вычислить адрес вектора прерывания по номеру прерывания.
17. По заданному номеру прерывания (13 h) вычислите логические адреса хранения исходных адресов обработчиков прерывания в таблице векторов....

Обработчик прерывания int 21h (по книге Калашникова)
Доброе время суток, я чтиаю книгу Калашникова-Ассемблер и уже втрой день не могу понять почему обработчик не перехватывает прерывания и не...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru