Вопрос
Я в Борланд СИ++ 3.0 замутил с помошью delay() и sound() будилку, но у нее есть глюк: цикл в ней останавливается по нажатию любой клавиши, а если просто закрыть окно в Виндоус, то писк останется, пока не перезагрузишь комп. В чем суть?
Ответ
Посмотри исходники RTL BC++ файлы delay.cas и sound.cas. Функции delay() и sound() работают с системным таймером 8253/8254. sound() программирует 2-й канал таймера и разрешает выход на speaker (порт 61h). nosound() отключает работу 2-го канала и выход его на speaker: outportb(0x61, inportb(0x61) & 0xfc); Когда закрываешь окно в Windows до вызова nosound(), таймер продолжает работать, и комп продолжает пищать. Глуши его nosound().
Подробно и доходчиво работа с микросхемой таймера описана здесь: http://www.lcard.ru:8105/~nail/frolov/bsp/v02/ch5.htm
если не хватит, то:
http://www.ya.ru/yandsearch?text=port+43h+61h
Sudbin
Copyright 2000-2004 Сообщество Чайников
Контактная информация