![]() |
|
![]() ![]() ![]() |
|
MaxNJ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 15.1.2006 Репутация: нет Всего: нет |
Хотелось бы узнать, как добиться того, чтобы, например, операция a=a+1 выполнялась ровно 100 раз в секунду.
Понятно, что обычного таймера с интервалом в 10 в таком случае не хватит. Например, на моем компьютере за секунду таких операций выполняется от 15 до 64, как бы сделать зависимость между временем и частотой выполнения операций? Это сообщение отредактировал(а) MaxNJ - 24.5.2006, 16:13 |
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
запусти вечный цикл вместо таймера.
в этом цикле вместо Sleep' а крути еще один цикл. в нем смотри сколько времени прошло с начала "кручения" -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
MaxNJ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 15.1.2006 Репутация: нет Всего: нет |
Если я не ошибаюсь, результат вечного цикла - загрузка цп на 100% и зависание программы... Может-быть я и ошибаюсь, но... Навряд ли...
|
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
не ошибаешся. но в чем проблема?
P.S. во втором цикле Sleep(0) можеш приписать -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
MaxNJ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 15.1.2006 Репутация: нет Всего: нет |
Что же, я попробовал, скорость выполнения операций гораздо больше, чем при таймере, но форма не реагирует на нажатие клавиш, все что находится на ней меняется только при использовании функции Refresh(). Как это можно исправить?
Это сообщение отредактировал(а) MaxNJ - 24.5.2006, 16:42 |
|||
|
||||
HappyLife |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
Засунуть цикл в отдельный поток.
|
|||
|
||||
chwind |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 15.2.2006 Репутация: 1 Всего: 1 |
Смирись что точно время в Винде ты не измеришь но приблизительно задать временной интервал (с точностью до микросекунд) можно так
Естественно чтобы форма не подвисала нужно вынести этот код в отдельный поток, но синхронизация между потоками увеличит погрешность измерения временного интервала |
|||
|
||||
MaxNJ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 15.1.2006 Репутация: нет Всего: нет |
Мда... Немного затянул я с ответом...
Я вообщем-то начинающий программер, поэтому не судите строго, но я не знаю, как засунуть функцию(ии) в отдельный поток. To chwind: это впринципе понятно, только я делал через системное время, а не через такты процессора. |
|||
|
||||
chwind |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 15.2.2006 Репутация: 1 Всего: 1 |
Системное время в винде ты получаешь с большой погрешностью. Через такты можно гораздо точнее определить временные интервалы. А на счет отдельного потока, посмотри в справке класс TThread, не пожалеешь если разберешься, без многопоточности часто просто не обойтись. |
|||
|
||||
MaxNJ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 15.1.2006 Репутация: нет Всего: нет |
ок, спс всем!
|
|||
|
||||
MaxNJ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 15.1.2006 Репутация: нет Всего: нет |
Так-с... Тема пока в действии, потому что возникла очередная проблемка.
Я делаю реал-тайм игру(только не крупный проект, а мелочь для себя, так сказать), и там похоже не очень подходит отдельный поток с бесконечным циклом. Дело в том, что для такой маленькой игры не должно быть характерным загрузка цп так, что в это время практически нельзя ничего делать и к тому-же тормоза в самой игре... Может как-нибудь можно обойти тормоза, связанные с бесконечным циклом в потоке или есть какой-либо другой способ? P.S. Приоритет, ниже tpNormal делает игру до невозможности медленной, ИМХО, не вариант. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 2 Всего: 260 |
MaxNJ, делай sleep в потоке или иным образом приостанавливай его выпонение.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |