Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Событие WM_TIMER, Ускорить работу таймера 
:(
    Опции темы
decembrist
Дата 6.7.2004, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 1.4.2004

Репутация: нет
Всего: нет



Что это за ф-ция GetTickCount()?
PM MAIL   Вверх
bel_nikita
  Дата 6.7.2004, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



zss К чему это? Надо же таймер >3 мсек.

Олег М
Цитата
на забывай винда нифига не система реального времени
поясните пожалуйста, что вы понимаете под системой реального времени?

Цитата
Что это за ф-ция GetTickCount()?

проясняем функцию GetTickCount()


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
decembrist
Дата 6.7.2004, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 1.4.2004

Репутация: нет
Всего: нет



Подскажите "чайнику" как это сделать
PM MAIL   Вверх
zss
Дата 6.7.2004, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: 1
Всего: 2



Цитата(bel_nikita @ 6.7.2004, 15:00)
zss К чему это? Надо же таймер >3 мсек.

Это было к примеру
А если надо, то задай сколько тебе надо в tm_delay() smile.gif
PM MAIL ICQ   Вверх
Олег М
Дата 6.7.2004, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



Цитата
поясните пожалуйста, что вы понимаете под системой реального времени?

По моему, система реального времени - это такая система, где время выполнения любой операции жёстко определено (по максимуму).

PM MAIL ICQ   Вверх
Дрон
Дата 6.7.2004, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 92



zss
Цитата
А если надо, то задай сколько тебе надо в tm_delay()

Так там же минимальный интервал это 1 тик = 1/18.2 секунды = 56 мс. Многовато...

bel_nikita
Цитата
поясните пожалуйста, что вы понимаете под системой реального времени?

Вот тут можно почитать: http://www.cvalka.net/hack/read.php?file=20&dir=
Windows однозначно НЕ является операционной системой реального времени.

Добавлено @ 17:05
decembrist
А что класс WaitableTimer, приведённый мной, не подходит?


--------------------
Да. Именно так.
PM   Вверх
decembrist
Дата 7.7.2004, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 1.4.2004

Репутация: нет
Всего: нет



Так что с таймером -то делать?
Создать поток вместо события OnTimer и как через поток его имитировать по Sleep()?
Подскажите новичку withstupid.gif
PM MAIL   Вверх
bel_nikita
Дата 7.7.2004, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Цитата
Windows однозначно НЕ является операционной системой реального времени
А вот и не правда. Смотря какая винда biggrin.gif
Вот, RTOS: Windows CE .NET, Windows XP Embedded exclamation.gif
Остальные Windows конечно же не RTOS.



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Дрон
Дата 7.7.2004, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 92



bel_nikita
Ну ладно, ладно -- согласен, что и виндовоз бывает эртэос smile.gif Толку-то от этого?
И ещё, поставлю-ка я тебе "+".

decembrist
В чём именно тебе помочь? Тут уже кучу примеров привели. Что ещё нужно?
Ты умеешь потоки создавать?
Ты знаешь, как работает Sleep()?
Ты знаешь, как устроена многозадачность в Windows?
Объяснять-то много прийдётся.


--------------------
Да. Именно так.
PM   Вверх
Coocky
Дата 7.7.2004, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



Цитата
Период в милисекундах необходимо установить от 1 до 3 мс.

Да я вообще не понимаю зачем тебе такая точность notify.gif Ты че в НАСА работаешь smile.gif В любом из предложеных тебе в вариантах ты будешь обречен на провал.Рано или поздно твой таймер даст сбой,т.к. у Винды помимо твоей проги есть еще одна важная прога-ОНА САМА.В любом случае если ЕЙ что-то нужно будет обработать,она тебя проигнорирует.Покажите мне хотя бы одну тестовую прогу по железу,которая дает точный результат sad.gif Везде все более или менее относительно.Как бы ты не хотел,ты всегда будешь работать под ВиндойНе спасут тебя потоки sad.gif



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
bel_nikita
Дата 8.7.2004, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Coocky я думаю прав.
А если на уровень ядра спустится?
Можно конечно таймера перепрограммировать, но тогда хана всей системе.
decembrist - переходи на RTOS wink.gif
Хотя RTOS тож такую точность не гарантирует.
А для чего нужна такая точность?
Если это устройство, то может в нем есть встроенный таймер? Тогда можно запрограммировать ентот таймер на сколь хошь. Ой, что-то меня понесло smile.gif Чувствую пора спать smile.gif

На сколько точен мультимедиа таймер

З.Ы.: М-да, что-то, как-то сложно все это под виндой smile.gif

Это сообщение отредактировал(а) bel_nikita - 8.7.2004, 00:55


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Дрон
Дата 8.7.2004, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 92



Дык, Windows это ж система для домохозяек. Зачем там такие таймеры smile.gif
И на уровень ядра она тебя не очень-то пустит. Разве что драйвера попробовать писать smile.gif
decembrist
Может можно и без таймера? Какова задача-то?

ЗЫ: Вдруг окажется, что мы тут всё слишком усложняем? smile.gif


--------------------
Да. Именно так.
PM   Вверх
Leopard25
Дата 9.7.2004, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 17.4.2004

Репутация: нет
Всего: нет




http://www.proglib.ru/detail.asp?id=1169

prectimer.zip - MFC класс, реализующий очень точный таймер, использующий встроенный счетчик процессоров Pentium, который опрашивается инструкцией ассемблера RSDTC
--------------------
Обдумай, верно ли и возможно ли то, что ты обещаешь, ибо обещание - есть долг. ( Конфуций )
PM MAIL ICQ   Вверх
Гость_Алексей
Дата 22.10.2005, 07:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(zss @ 6.7.2004, 12:25)
К примеру (а если еще это в отдельный поток - то тогда то что надо :) )

Причем этот код не зависит от производительности процессора :p

Цитата

Для работы с таймером (точнее говоря, для работы с каналом 0 таймера) BIOS содержит две функции прерывания INT 1Ah. Они позволяют прочитать текущее содержимое счетчика и изменить его.

Функция 00h предназначена для чтения содержимого счетчика таймера:

На входе:      AH = 00h.

На выходе:      CX = старший байт счетчика;

                DX = младший байт счетчика;

                AL = 0, если с момента перезапуска таймера
                        прошло более 24-х часов.



Изменить содержимое счетчика таймера можно с помощью следующей функции:

На входе:      AH = 01h;

                CX = старший байт счетчика;

                DX = младший байт счетчика.

На выходе:      не используются.



Функцию чтения таймера можно использовать для организации программной задержки. Так как работа таймера не зависит от производительности процессора, быстродействие системы не будет влиять на формируемую задержку.

Однако следует учитывать, что точность формирования задержки определяется частотой обновления счетчика таймера (18.2 Гц), и может оказаться недостаточной для некоторых приложений.

Мы подготовили функцию для формирования задержек с помощью таймера:

/**
*.Name        tm_delay
*.Title        Формирование задержки по таймеру
*
*.Descr        Эта функция формирует задержку, используя
*              системный таймер.
*
*.Proto        void tm_delay(int ticks)
*
*.Params      int ticks - величина задержки в тиках
*                          таймера (за одну секунду таймер
*                          тикает 18.2 раза).
*
*.Return      Ничего
*
*.Sample      tm_samp1.c
**/

#include <dos.h>
#include <conio.h>

void tm_delay(int ticks) {

        _asm {

                push si

                mov  si, ticks
                mov  ah, 0
                int  1ah

                mov  bx, dx
                add  bx, si

delay_loop:

                int  1ah
                cmp  dx, bx
                jne  delay_loop

                pop  si
        }
}



Функция использует только одно слово регистра таймера, что позволяет формировать задержки длительностью до 65536 тиков таймера. Приведенная ниже программа демонстрирует использование функции для генерации примерно десятисекундной задержки :

#include <stdio.h>
#include "sysp.h"


main() {

        printf("\nДля выполнения программной задержки примерно"
                        "\nна 10 секунд нажмите любую клавишу.");
        getch();

        printf("\n\nВремя пошло...");

        tm_delay(18 * 10);

        printf("\nГотово!");

        exit(0);
}



BIOS компьютеров IBM AT содержит еще две интересные функции для работы с таймером. Это функции 83h и 86h прерывания INT 15h.

Функция 83h позволяет запустить таймер на счет, указав адрес некоторого байта в оперативной памяти. Программа, запустившая таймер, сразу после запуска получает управление. По истечении времени, заданного при запуске таймера, функция устанавливает старший бит указанного байта в единицу, сигнализируя таким образом программе о завершении указанного временного интервала. Программа может также отменить работу таймера в этом режиме.

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

Приведем формат вызова функции 83h прерывания INT 15h:

На входе:      AH = 83h;

                AL = код подфункции:

                  0 - установить интервал, запустить таймер;
                  1 - отменить работу таймера;

                CX = старший байт времени работы счетчика,
                  задается в микросекундах;

                DX = младший байт счетчика;

                ES:BX = адрес байта, в котором по истечении
                  интервала времени старший бит будет
                  установлен в 1.

На выходе:      не используются.



Функция 86h специально предназначена для формирования задержек. Она позволяет определять время задержки в микросекундах, что достаточно удобно для многих задач. Во время выполнения задержки разрешены прерывания. Формат вызова функции:

На входе:      AH = 86h;

        CX = старший байт времени задержки,
                задается в микросекундах;

        DX = младший байт времени задержки.

На выходе:      не используются.


В вашем исходнике есть библиотека sisp.h, я ее нимогу найти нигде. Если не сложно отправите на ящик [email protected], или ссылку.
  Вверх
KaraKum
Дата 16.12.2007, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: 1
Всего: 1



У меня вопрос: как добывить таймер в форму? В "Toolbox" таймер (как и многие другие элементы) выглядет прозрачным и добавить его нельзя, а добавить его функцией "SetTimer()" не могу, потому что не знаю как Visual C++ назвала указатель на родительское окно. Подскажите!  smile 
PM MAIL WWW   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1018 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.