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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как установить таймер 50 раз в секунду 
:(
    Опции темы
balda
Дата 25.2.2004, 02:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Таймер можно конечно установить на любой промежуток, но вызываться фактически чаще чем 18 раз в минуту он не будет
Как обойти это ограничение.
Заранее Большое спасибо всем.
  Вверх
Unregistered
Дата 25.2.2004, 02:45 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











чаще чем 18 раз в секунду я имел ввиду
  Вверх
chipset
Дата 25.2.2004, 05:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Только примерно подстроить процессор.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
oleg1973
Дата 25.2.2004, 06:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

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



ну а если сделать тред
а туда Sleep,20


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Дрон
Дата 25.2.2004, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата
ну а если сделать тред
а туда Sleep,20
Не гарантирует ИМХО... Мало ли какие приоритеты установлены в системе.


--------------------
Да. Именно так.
PM   Вверх
Unregistered
Дата 25.2.2004, 16:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











может GetTickCount() попробовать?
  Вверх
Гость_Ridat
  Дата 26.2.2004, 02:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











WINBASE:

UINT SetTimer(
HWND hWnd, // handle of window for timer messages
UINT nIDEvent, // timer identifier
UINT uElapse, // time-out value
TIMERPROC lpTimerFunc // address of timer procedure
);

WINMFC:

CWnd::SetTimer
UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );


CWindow::SetTimer
UINT SetTimer( UINT nIDEvent, UINT nElapse )



HWnd – дескриптор окна

nIDEvent – например 1

uElapse – (в миллисекундах) 20

LpTimerFunc – NULL

  Вверх
Unregistered
Дата 26.2.2004, 02:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











опрашивать GetTickCount() как я понимаю?
Но это загрузит проц на 100%

Не ну анимация же както выводится, и не грузит 100% процессор
А там кадры точно чаще 18 раз с сек.
Как это делается?

  Вверх
Unregistered
Дата 26.2.2004, 02:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Гость_Ridat НЕ ВЫДЕТ!
  Вверх
OlegsDP
Дата 26.2.2004, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

 DWORD period = 20; // ms
 DWORD tickStart = GetTickCount ();
 for (;;) {
   // Zdes' proverjaem, ne pora li zakrugljat'sja. Esli da - to break;


   // Zdes' tvorim, chto hotim.


   DWORD tickStop = GetTickCount ();
   DWORD ticks = tickStop - tickStart;
   if (ticks >= period) {
     tickStart = GetTickCount ();
   } else {
     Sleep (period - ticks);
     tickStart += period;
   }
 }


Это сообщение отредактировал(а) OlegsDP - 26.2.2004, 15:25
PM MAIL   Вверх
bel_nikita
Дата 26.2.2004, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
опрашивать GetTickCount() как я понимаю?
Но это загрузит проц на 100%


Откуда такие утверждения? Проц был и создан для того чтобы постоянно работатьsmile.gif

OlegsDP
У тебя получается вечный циклsmile.gif И Sleep надобы убрать. Sleep как я знаю переключает потоки. Что не очень хорошо в данной ситуации. Логично было-бы сделать отдельную функцию ( без for(;;)! ) и вызывать ее каждый раз в главном цикле программы. Короче надо создать целый классsmile.gif
У меня весь софт по такому принципу работает, но к сожалению выложить его не могу. Почему объяснять не буду. Не мое творение. Одним словом - коммерция


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


Unregistered











Цитата
QUOTE
опрашивать GetTickCount() как я понимаю?
Но это загрузит проц на 100%


Откуда такие утверждения? Проц был и создан для того чтобы постоянно работать

Это ты про дос что-ли?
Да если бы небыло ограничения на занятость проца то и вопрса такого небыло-бы. Там все элементарно.
Насчет Слипа попробую но не уверен что это будет равномерно.



  Вверх
Ridat
Дата 27.2.2004, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я не совсем понимаю таймер нужен "фактический" или "формальный", так как во втором случае в Sys Win(X) (чтобы работала на каждой машине одинаково) добиться нельзя.
PM MAIL   Вверх
Ridat
Дата 27.2.2004, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Sorry? В первом случае.
PM MAIL   Вверх
OlegsDP
Дата 27.2.2004, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bel_nikita>У тебя получается вечный цикл

Во-первых: подозреваю, что я гораздо старше Вас.
Во-вторых: обращайтесь к любому незнакомому Вам человеку на Вы (а мы с Вами не знакомы).
В-третьих: Учитесь читать текст программы. В том числе коментарии:
Код

 // Zdes' proverjaem, ne pora li zakrugljat'sja. Esli da - to break;


bel_nikita>Логично было-бы сделать отдельную функцию ( без for(;;)! ) и вызывать ее каждый раз в главном цикле программы.
bel_nikita>И Sleep надобы убрать. Sleep как я знаю переключает потоки.

Совет преждний: учитесь читать текст программы. В том числе коментарии:
Код

 // Zdes' tvorim, chto hotim.


Представленный мною фрагмент кода (отлаженный) представляет собой самоподстраивающийся цикл, стремяшийся выполнять полезный код 50 раз в секунду. Изменяя значение переменной period можно менять частоту цикла. Максимальная частота цикла определяется длительностью выполнения полезного кода /Zdes' tvorim, chto hotim/. Функция Sleep использована, чтобы эффективно использовать ресурс процессора, отдавая управление другим тредам и процессам на "лишнее" для нас время. При желании, цикл можно использовать как главный цикл программы, а можно оформить в виде отдельной функции, куда как параметр передавать период и указатель на CALLBACK-функцию.

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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