Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация задержки времени 
:(
    Опции темы
Nikosss
Дата 15.1.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет всем! Такая вот проблема- не могу реализовать задержку времени. Пробовал использовать Timer, но с ним не получается зациклить. Я понимаю, его функция 
Код

void __fastcall TForm1::Timer1Timer(TObject *Sender)
 сама по себе является циклом, то есть циклически вызывается через описанный интервал времени. Так что в нее засунуть цикл - не подходит. А нужно примерно так.

Код

for(int i=0; i<8; i++) {
moveUp();
//здесь должна быть задержка
}

PM MAIL   Вверх
Lazin
Дата 15.1.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Sleep(1000) - задержка в 1 сек.
PM MAIL Skype GTalk   Вверх
Rodman
Дата 15.1.2007, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



Код

int i;
void __fastcall TForm1::Form1Create(TObject *Sender)
{ i=0;

}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{ i++;
   moveUp();
   if(i==8)then
        Timer1->Enable=False;
}


так тоже можно...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Nikosss
Дата 15.1.2007, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если вставляю там, где должна быть задержка, sleep(1000), то пишет undefined function.  Каким образом ее нужно объявить?
PM MAIL   Вверх
Bima
Дата 15.1.2007, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Sleep(1000)

Пиши с большой буквы


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
Nikosss
Дата 15.1.2007, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вообщем есть функция 

Код

void TForm1::Step() {
 for(a=0; a<8; a++) 
 {
mRight(gx, Image55);
Sleep(1000);
  }
                    }


ее я вызываю в 
Код

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)

 но у меня происходит задержка появления формы, а не задержка передвижения изображения Image55 вправо
PM MAIL   Вверх
Syrex
Дата 15.1.2007, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну так ты её вызываешь до создания формы, а не после
PM MAIL ICQ   Вверх
AntonChik
Дата 15.1.2007, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



2Nikosss:ага. а более неудачного места вызова ты не мог придумать? smile
а вообще загляни сюда:
пауза, но не Sleep

Это сообщение отредактировал(а) AntonChik - 15.1.2007, 16:19
--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги 
PM MAIL   Вверх
Anikmar
Дата 15.1.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



А что вообще надо сделать? Может там по-другому проще будет сделать?
PM MAIL ICQ   Вверх
Nikosss
Дата 16.1.2007, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я пытаюсь сделать алгоритм движения изображения Image55 по периметру формы Form1. 
Код

void TForm1::DvizeniePoPerimetru() {
for(int i=0; i<8; i++) {
mRight(gx, Image55);
Sleep(1000);//здесь должна быть задержка
}
for(int i=0; i<8; i++) {
mDown(gy, Image55);
Sleep(1000);//здесь должна быть задержка
}
for(int i=0; i<8; i++) {
mLeft(gx, Image55);
Sleep(1000);//здесь должна быть задержка
}
for(int i=0; i<8; i++) {
mUp(gy, Image55);
Sleep(1000);//здесь должна быть задержка
}

}

 void TForm1::mUp(int &y, TImage *I){
 y=y-48;
 I->Top=y;
 }
 void TForm1::mDown(int &y, TImage *I){
 y=y+48;
 I->Top=y;
 }
 void TForm1::mLeft(int &x, TImage *I){
 x=x-48;
 I->Left=x;
 }
 void TForm1::mRight(int &x, TImage *I){
  x=x+48;
  I->Left=x;
 }


Вызов функции DvizeniePoPerimetru(); вне функции  
Код
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)

 не получается. Изображение не двигается, а если вызов в ней, то происхолит задержка формы. В принципе мне нужна функция задержки времени, корорую я мог бы вызывать на месте Sleep(1000); 
PM MAIL   Вверх
Lazin
Дата 16.1.2007, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Возможно твоя проблема в том, что когда ф-я Sleep выполняется программа не обрабатывает сообщения, как если-бы ты сделал задержку через цикл. Sleep используется например, тогда, когда у тебя есть поток, который постоянно что-либо должен делать не нагружая при этом систему:
//------------
while (1) {
    //делаем фоновую работу
   Sleep(100);
}
//------------ 
Попробуй так:
#include <time.h> 
long delay = 1000;
long t1 = t2 = GetTickCount();

while ((t2 - t1) < delay) {
    Application->ProcessMessages();//Это нужно чтобы форма с изображением реагировала на события
    //и перерисовывалась во время ожидания
    t2 = GetTickCount();
}

ф-я GetTickCount возвр. время в миллисекундах от начального. 

Это сообщение отредактировал(а) Lazin - 16.1.2007, 09:12
PM MAIL Skype GTalk   Вверх
pandrew
Дата 16.1.2007, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Nikosss)
Изображение не двигается, а если вызов в ней, то происхолит задержка формы. В принципе мне нужна функция задержки времени, корорую я мог бы вызывать на месте Sleep(1000);  

"В принципе" это реализуется иначе. Заводишь таймер с нужным интервалом. В функции обработки таймера двигаешь свой Image, т.е. анализируешь его текущие координаты и расчитываешь новые. 
Следующим шагом начнешь борьбу за крсоту движения.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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