Сделал программу задержку на 10 секунд на зацикливании. Преподователь сказал сделать задержку на системом таймере. Неделю мучаюсь.МОжете помочь? Цель: Выввести вермя на экран. ТИпо 12:30:35 ПРоходит 10 секунд и программа прерываеться.Причем Чтобы использовался системный таймер. Заранее спасибо
может я и гоню, но! Sleep(10*1000); // задержка на 10 секунд. вызывается и происходит задержка в kernel32.dll то бишь в системном таймере....... хотя конечно лезут мысли с GetTickCount... GetCurrentTime... Now()... Time()...
А я думал использовать. Точнее наверно и надо использваоть Функцию 2ch 21 прерывания... МОжно листинг программы? задуманного на Sleep? НО вот пот 2ch 21 int было бы лучше>тока не могу реализовать еще и с выводом.
Exorcist Мне кажется, что лабораторные работы - этажом выше. Хотя бы написал на каком языке, в ДОС-окне, WIN-приложение ? Зад режка - я тащусь ))
Спрашиваем у системы время, прибавляем к нему интервал ожидания, запоминаем. Далее в цикле узнаём время. Если больше или равно запомненому, выход из цикла. Аналогичным образом можно поступить с системным таймером - двойное слово по адресу 40:6c, инкрементируется каждые 55 мсек.
Со Sleep тебе не пойдёт - тебя просять самому Sleep написать. А что такого сложного? Вызываеш int21h fn=2Ch -> CH-Hours, CL-Minutes, DH-Seconds, DL-сотые доли секунды. Запоминаеш StartTime=(Hours*60+Minutes)*60+Seconds; Потом в цикле делаеш int21_get_time(); CurrTime=(Hours*60+Minutes)*60+Seconds и если CurrTime-StartTime<10 продолжаеш цикл, иначе выход. А вообще проще через таймер сделать. Счётчик расположен по дресу 0040:006C - 32бита, изменяется 18.2 раза в секунду. Получаеш Код (Text): push ds xor ax,ax mov ds,ax mov bx,46Ch mov ecx,ds:[bx] add ecx,182 @@sleep: mov eax,ds:[bx] sub eax,ecx jb @@sleep pop ds
TO Vovchik А можно программные наброски? И тот и тот вариант? А то уже 4ую лабу пишу голова пухнет) TO VAlterg :Com файл простой) ДА затупил в названии)
To cppasm Хм.Идею понял. Как зациклить полностью? И как вывести значение времени на экран? Time:HH:MM:SS
2:cppasm Счётчик расположен по дресу 0040:006C - 32бита, изменяется 18.2 раза в секунду. Получаеться если счетчик изменился на 10 секунд то делаем выход из цикла? если разница значений начала и конца в 182 раза? Хм .
Загляни сюда. Может пригодиться. 8253 Programmable Interval Timer http://www.nondot.org/sabre/os/articles/MiscellaneousDevices/
Вы припарили уже своим Sleep() Что так трудно вопрос прочитать? Во-первых, под ДОС, а во-вторых - как ты себе это представляеш? Преподаватель: напишите задержку с использованием таймера Студент: нафик писать, всё написано до нас - Sleep(). а как работает мне пофиг. Так что ли? Счётчик изменился не в 182 раза, а на 182. Простейшая арифметика. 1 секунда - 18.2 такта (изменение счётчика) 10 секунд - X тактов (изменение счётчика) X=18.2*10/1=182 На экран вывести легко. Преобразуй числа в строку и выведи например int21h fn=09