Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];

Вниз

Not enough timers available!   Найти похожие ветки 

 
savyhinst ©   (2008-06-23 19:26) [0]

Здраствуйте!
Подскажите пожалуйста, почему, когда я пытаюсь в начале процедуры приостановить таймер (на всякий случай), а в конце - продолжить
tmr.Enabled:=flase;
... ... ...
tmr.Enabled:=true;

возникает загадочная ошибка Not enough timers available и что она означает.
Спасибо за внимание.


 
Сергей М. ©   (2008-06-23 19:27) [1]


> пытаюсь в начале процедуры приостановить таймер (на всякий
> случай)


И какой же такой "всякий случай", по-твоему,  может приключиться ?


 
savyhinst ©   (2008-06-23 19:30) [2]

Я делаю усовершенствованый тетрис. То есть, для начала, обычный. И во время переворачивания фигурки таймер, по моему, может попробовать сдвинуть её вниз на одну клетку. А это может быть причиной глюкофф моей проги.


 
Сергей М. ©   (2008-06-23 19:41) [3]


> таймер, по моему, может попробовать сдвинуть её вниз на
> одну клетку


Таймер сам по себе ничего не "двигает", у таймера совершено иные задачи - он "тикает".

Эти самые "тики", в конечном итоге, определенным образом превращаются в оконные сообщения WM_TIMER, выборка и обработка которых превращается в вызов и исполнение обработчика события TTimer.OnTimer.

В каждый момент времени в очереди оконных сообщений может находиться не более одного сообщения WM_TIMER.

Текущий обработчик события OnTimer не может быть прерван обработкой такого же или иного события, если ты явно или неявно не предполагаешь такой логики. Явное предположение - это, например, явный вызов Application.ProcessMessages в теле обработчика OnTimer.


 
savyhinst ©   (2008-06-23 19:43) [4]

Хмхм. А Что Значит Таинственная 0шибка??


 
Сергей М. ©   (2008-06-23 19:47) [5]

Дофига таймеров ты насоздавал, потому и ошибка)


 
Anatoly Podgoretsky ©   (2008-06-23 20:03) [6]

> savyhinst  (23.06.2008 19:43:04)  [4]

Слова настолько простые, что их в состояние перевести с помощью словаря любой человек, не знакомый с английским. Почему у тебя такие сложности?


 
savyhinst ©   (2008-06-23 20:09) [7]

хм. Но у меня их всего два!


 
Сергей М. ©   (2008-06-23 20:16) [8]


> у меня их всего два


Значит не два, раз ошибка.


 
Сергей М. ©   (2008-06-23 20:17) [9]

Да и слишком много это - два таймерных компонента.
Достаточно одного.


 
Anatoly Podgoretsky ©   (2008-06-23 20:19) [10]

А ты приведи точный код из твоей программы, ну или хотя бы все зависимые определения.


 
Правильный-Вася   (2008-06-23 20:33) [11]


> tmr.Enabled:=flase;

это что за зверь?

явно таймер создается налету внутри процедуры срабатывания другого таймера


 
savyhinst ©   (2008-06-23 20:48) [12]

хмхм. Фрагмент кода не получится - код слишком большой...
Но в кратце - так:
type tmy=class(TComponent)
private
 tmr:TTimer;
 tmrAnim:TTimer;
 map:TMap;
public
 procedure Init;  //для экономии места код прямотут
 begin
   tmr:=TTimer.Create;
   tmr.OnTimer:=OnFalling; //
 end;

 procedure OnFalling(sender:TObject);
 begin
   if Falled(map)
     then MakeFalled
     else FallAnimation;
   FallFigures(map);
 end;

 procedure FallAnimation
 begin
   tmrAnim:=TTimer.Create;
   tmrAnim.OnTimer:=OnAnimTimer;
 end;

 procedure OnAnimTimer(sender:TObject);
 begin
   //тут обращаемся к map...
 end;
 
 procedure Rotate; //делается нан нажатие кнопки
 begin
   tmrAnim.enabled:=false;
   tmr.enabled:=false;
   //тут обращаемся к map...
   tmrAnim.enabled:=true;
   tmrAnim.enabled:=true;
 end;
end;

ухх... Написал, кажется


 
Сергей М. ©   (2008-06-23 20:56) [13]

Ну и где тут всего два таймера ?

Их тут туева хуча - всякий раз при вызове обработчика FallAnimation в теле  метода FallAnimation создается очередной новый таймер.


 
Сергей М. ©   (2008-06-23 20:57) [14]


> при вызове обработчика FallAnimation


OnFailing, имелось виду.


 
HINST   (2008-06-23 21:07) [15]

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


 
Сергей М. ©   (2008-06-23 21:13) [16]


> второй таймер разрушает себя каждый раз, как только закончена
> анимация


Значит не разрушает.
Да и нафих нужен этот второй таймер, если можно вполне обойтись одним-единственным ?


> ошибка возникает не через некоторое время, когда таймеров
> уже куча, а в процедуре rotate


Я даже скажу в какой конкретно строчке - tmrAnim.enabled:=true


 
HINST   (2008-06-23 21:14) [17]

ХМХМ. А почему так?? Не понятно.


 
Сергей М. ©   (2008-06-23 21:18) [18]


> почему так?


Что "почему" ?


 
HINST   (2008-06-23 21:23) [19]

почему включение работавшего таймера приводит к "нехватке таймеров" ?


 
Сергей М. ©   (2008-06-23 21:26) [20]

Ты вот скажи, за каким лешим тебе понадобились два таймера ?

При создании (или инициализации) компонента создаешь таймер, при уничтожении (или деинициализации) уничтожаешь. При начале анимации разрешаешь его, при завершении анимации запрещаешь. Таймер тикает с нужной частотой, например, 15 Гц (вполне достаточно для этой игры). При каждом тике строишь игровую сцену и тут же рендеришь ее на канву.

И все !



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.011 c
9-1171983109
Kav
2007-02-20 17:51
2008.07.27
smd2v12-src большая модель приводит к Out of memory


2-1214592890
Res
2008-06-27 22:54
2008.07.27
Recv


6-1190791300
botaniQ
2007-09-26 11:21
2008.07.27
POST запрос с помощью ShellExecute...


2-1214322012
Галинка
2008-06-24 19:40
2008.07.27
сравнить два файла?


2-1214230754
evgenij
2008-06-23 18:19
2008.07.27
В чем рисовать





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский