Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C++ Builder > Единая частота выполнения операций. |
Автор: MaxNJ 24.5.2006, 16:12 |
Хотелось бы узнать, как добиться того, чтобы, например, операция a=a+1 выполнялась ровно 100 раз в секунду. Понятно, что обычного таймера с интервалом в 10 в таком случае не хватит. Например, на моем компьютере за секунду таких операций выполняется от 15 до 64, как бы сделать зависимость между временем и частотой выполнения операций? |
Автор: _hunter 24.5.2006, 16:23 |
запусти вечный цикл вместо таймера. в этом цикле вместо Sleep' а крути еще один цикл. в нем смотри сколько времени прошло с начала "кручения" |
Автор: MaxNJ 24.5.2006, 16:27 |
Если я не ошибаюсь, результат вечного цикла - загрузка цп на 100% и зависание программы... Может-быть я и ошибаюсь, но... Навряд ли... |
Автор: _hunter 24.5.2006, 16:40 |
не ошибаешся. но в чем проблема? P.S. во втором цикле Sleep(0) можеш приписать |
Автор: MaxNJ 24.5.2006, 16:41 |
Что же, я попробовал, скорость выполнения операций гораздо больше, чем при таймере, но форма не реагирует на нажатие клавиш, все что находится на ней меняется только при использовании функции Refresh(). Как это можно исправить? |
Автор: HappyLife 24.5.2006, 17:39 |
Засунуть цикл в отдельный поток. |
Автор: chwind 25.5.2006, 09:22 | ||
Смирись что точно время в Винде ты не измеришь но приблизительно задать временной интервал (с точностью до микросекунд) можно так
Естественно чтобы форма не подвисала нужно вынести этот код в отдельный поток, но синхронизация между потоками увеличит погрешность измерения временного интервала |
Автор: MaxNJ 3.6.2006, 17:32 |
Мда... Немного затянул я с ответом... Я вообщем-то начинающий программер, поэтому не судите строго, но я не знаю, как засунуть функцию(ии) в отдельный поток. To chwind: это впринципе понятно, только я делал через системное время, а не через такты процессора. |
Автор: MaxNJ 3.6.2006, 19:02 |
ок, спс всем! |
Автор: MaxNJ 6.6.2006, 10:49 |
Так-с... Тема пока в действии, потому что возникла очередная проблемка. Я делаю реал-тайм игру(только не крупный проект, а мелочь для себя, так сказать), и там похоже не очень подходит отдельный поток с бесконечным циклом. Дело в том, что для такой маленькой игры не должно быть характерным загрузка цп так, что в это время практически нельзя ничего делать и к тому-же тормоза в самой игре... Может как-нибудь можно обойти тормоза, связанные с бесконечным циклом в потоке или есть какой-либо другой способ? P.S. Приоритет, ниже tpNormal делает игру до невозможности медленной, ИМХО, не вариант. |
Автор: skyboy 6.6.2006, 10:57 |
MaxNJ, делай sleep в потоке или иным образом приостанавливай его выпонение. |