Новости Фотки Надписи на партах Под гармошку Обои для рабочего стола Downloads Компьютерные магазины Фуфло ЕЯС НКС ООП СЦОД Гостевая Я ВКонтакте |
Объектно-ориентированное программированиеУрок №4. Системный таймер.Наверное, при создании игр часто возникают вопросы: как сделать так, чтобы объекты двигались независимо друг от друга? Как сделать, чтобы нажатия клавиш не тормозили процесс игры? В этом нам поможет системный таймер. Дело в том, что работа с функцией delay() неудобна. Неудобна тем, что во время выполнения этой функции, программа находится в режиме ожидания, то есть не выполняет никаких действий (хотя могла бы). И главное: программа даже не реагирует на нажатия клавиш, что особенно обидно. Ведь если при длительной паузе юзер начнём нажимать на кнопки, буфер клавиатуры может переполниться и системный блок начнёт издавать неприятные пикания. Так вот, есть способ преодолеть эти препятствия. По адресу 0040:006C расположен системный таймер, значение которого увеличивается на единицу через каждые 55 миллисекунд не зависимо от каких-либо событий. Такую возможность просто грех не использовать. Значение системного времени представляет 4-хбайтовое число (тип "unsigned long"). Объявим дальний указатель и проинициализируем его значение адресом 0040:006C: unsigned long far *SYSTIME= (unsigned long far *) 0x0040006c; Можете даже посмотреть, как изменяется значение, расположенное по этому указателю, с помощью вот такой простенькой программки: #include <conio.h> #include <iostream.h> Следующий пример демонстрирует использование системного таймера: #include <conio.h> #include <iostream.h> То есть суть проста. Засекаем время: unsigned long time= *SYSTIME; Затем периодически с помощью ((*SYSTIME - time) * 0.055) определяем сколько прошло секунд. И если интервал времени истёк, то выполняем какое-то действие и засекаем время поновой. if ((*SYSTIME - time) * 0.055 >= interval) { А вот так вот можно сделать обработку нажатий на клавиши во время какого-либо процесса: #include <conio.h> #include <iostream.h> То есть, здесь всё также. Буквы выводятся с заданным интервалом независимо друг от друга. Плюс ко всему, программа выводит символ, введённый пользователем с клавиатуры. И эти нажатия на клавиши совершенно не затормаживают выполнение других действий в программе. Вот таким образом, благодаря системному таймеру, можно распараллелить процессы. Но помните, что ровно в полночь, как только часы пробьют двенадцать, всё волшебство улетучится, а системный таймер превратится в тыкву. :) Шучу, шучу! На самом деле его значение просто сбросится в нуль. Поэтому, если вы не предусмотрели эту ситуацию, не рекомендую сдавать свою курсовую в 12 часов ночи. :) |
Дизайн: Красиков Виктор, kv630@mail.ru, ICQ - 319227
Местонахождение: Россия, респ. Бурятия, г. Улан-Удэ
Время на сервере: 02.04.23 01:22
Время в Улан-Удэ: 02.04.23 06:22
Время генерации страницы 0.002286 сек.