Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Зависание таймера


Автор: Simon14 8.5.2009, 13:33
У меня появилась проблемка мож кто подскажет изза чего ето может быть. Есть таймер который выполняет функцию отображения времени и изменения позици в прогрес бар и проверка на Edit1KeyPress. вот и в условиях проверки необходимо запустить MediaPlayer при нажатии на кнопу таймер запускаеться а при последуюшем нажатии притормажуеться  если зажать кнопку то таймер остонавливаетьсь на время а потом время скачком наростает, при удалении запуска MediaPlayer  все работает нормально.Каковы возможные причины. Зарание спасибо  

Автор: Данкинг 8.5.2009, 15:40
Мало что понял, но подумал про Application->ProcessMessages. smile 

Автор: artsb 8.5.2009, 16:05
Simon14, вы какие обработчики событий юзаете? Давайте код. Хотя бы часть.

Автор: Simon14 8.5.2009, 16:20
вот код 
Код

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
n++;
Timer1->Enabled=true;
Timer3->Enabled=true;
q = StrToFloat (Edit2->Text);
Timer1->Enabled =true;    // Таимер включен
Timer1->Interval = 10;    // Интервал 1 сек
if(Key == panel2_text[1])

{
 i++;
 Label10->Visible = false;
 Label11->Visible = true;
 prav++;
 Label6->Caption = "0" + FloatToStr(prav);
 panel1_text += panel2_text[1];
 panel2_text.Delete(1,1);
 Panel1->Caption = panel1_text;
 Panel2->Caption = panel2_text;
  }
 else
 {

 Label11->Visible = false;
 Label10->Visible = true;
neprav ++;
Button2->Click();
MediaPlayer2->FileName= ExtractFilePath(ExtractFileDir(Application->ExeName))+"\\Sound\\Ow - Vinni-Pooh.mp3"; // БезMediaPlayerработает
MediaPlayer2->Open();
MediaPlayer2->Play();
Label7->Caption = "0" + FloatToStr(neprav);
     }
  Form4->Button1->Click();
  Form5->Button1->Click();
  Form6->Button1->Click();
  if (RichEdit1->Text.Length()==i-1)
{Edit1->Enabled=false;
Timer1->Enabled=false;
N9->Click();
}
else
{
} 

Код

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
   if (ProgressBar1->Position != 0)
ProgressBar1->Position--;
   if ( sec < 59)
sec++;
else
{
sec = 0;
if ( min < 59 )
min++;
else
{
min = 0;
hou++;
Label5->Caption = IntToStr(hou);
}
if ( min<= 59 )
Label1->Caption = "0" + IntToStr(min);
else
Label1->Caption = IntToStr(min);
Label4->Visible = ! Label4->Visible;
}
if ( sec <= 59 )
Label2->Caption = "0" + IntToStr(sec);
else
Label2->Caption = IntToStr(sec);
  if ( Form2->CheckBox1->Checked==true)
{
  if (hou == q)  // условие

 {
Label9->Visible =true;
Label9->Caption=b;
Timer1->Enabled =false;   //Таймер выключен
Label2->Caption="00";  //присвоить 00
Edit1->Enabled=false;


 ShowMessage(" Время вышло");
 }
 else
  {



   } }
   else {}

}

Автор: artsb 8.5.2009, 16:54
Цитата(Simon14 @  8.5.2009,  16:20 Найти цитируемый пост)
Timer1->Interval = 10;    // Интервал 1 сек

Неа.
Код

Timer1->Interval = 1000;    // Интервал 1 сек


Simon14, я спрашивал про обработчики кнопки smile

Автор: Simon14 8.5.2009, 23:15
я не могу понять за что вы говорите что за обработчики кнопки можно пример обработчика

Автор: Dmi3ev 8.5.2009, 23:21
Цитата

я не могу понять за что вы говорите что за обработчики кнопки можно пример обработчика 

код, который написан на событие, в данном случае на нажатие (это и есть обработчик какого-либо события)

Автор: Simon14 8.5.2009, 23:32
при нажатии на клавишу клавиатуры производиться проверка на соответствие Символа в поле Рanel с нажатым символом на клавеатуре
if(Key == panel2_text[1])
ну и выполнение последуюших действий 
Код

{
 i++;
 
 prav++;
 panel1_text += panel2_text[1];
 panel2_text.Delete(1,1);
 Panel1->Caption = panel1_text;
 Panel2->Caption = panel2_text;
  }
 else
 {
neprav ++;
Button2->Click();
MediaPlayer2->FileName= ExtractFilePath(ExtractFileDir(Application->ExeName))+"\\Sound\\Ow - Vinni-Pooh.mp3"; // БезMediaPlayerработает
MediaPlayer2->Open();
MediaPlayer2->Play();
else
{
} 

если я вас правельно понял

Автор: Dmi3ev 8.5.2009, 23:39
Simon14, ты издеваешься?
Цитата

при нажатии на кнопу таймер запускаеться а при последуюшем нажатии притормажуеться  если зажать кнопку то таймер остонавливаетьсь на время а потом время скачком наростает

короче, отредактируй свое предыдущее сообщение и выложи весь юнит... так будет проще...

Автор: Simon14 9.5.2009, 11:47
при нажатии на клавишу клавиатуры производиться запуск таймера и проверка на соответствие Символа в поле Рanel с нажатым символом на клавеатуре 
Код

Timer1->Enabled=true;

if(Key == panel2_text[1])
ну и выполнение последуюших действий 
{
 i++;
 
 prav++;
 panel1_text += panel2_text[1];
 panel2_text.Delete(1,1);
 Panel1->Caption = panel1_text;
 Panel2->Caption = panel2_text;
  }
 else
 {
neprav ++;
Button2->Click();
MediaPlayer2->FileName= ExtractFilePath(ExtractFileDir(Application->ExeName))+"\\Sound\\Ow - Vinni-Pooh.mp3"; // БезMediaPlayerработает

MediaPlayer2->Open();
MediaPlayer2->Play();
else
{
} 

при повторном нажатии на кнопку клавиатуры таймер почемуто притормажует а при удержании кнопки время перестает идти при оттпускании кнопки скачком наростает 
вот код на таймере
Код

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
   if (ProgressBar1->Position != 0)
ProgressBar1->Position--;
   if ( sec < 59)
sec++;
else
{
sec = 0;
if ( min < 59 )
min++;
else
{
min = 0;
hou++;
Label5->Caption = IntToStr(hou);
}
if ( min<= 59 )
Label1->Caption = "0" + IntToStr(min);
else
Label1->Caption = IntToStr(min);
Label4->Visible = ! Label4->Visible;
}
if ( sec <= 59 )
Label2->Caption = "0" + IntToStr(sec);
else
Label2->Caption = IntToStr(sec);
  if ( Form2->CheckBox1->Checked==true)
{
  if (hou == q)  // условие

 {
Timer1->Enabled =false;   //Таймер выключен
Label2->Caption="00";  //присвоить 00
Edit1->Enabled=false;


 ShowMessage(" Время вышло");
 }
 else
  {



   } }
   else {}

}
 
вроде все

Автор: artsb 9.5.2009, 23:02
Цитата(Simon14 @  9.5.2009,  11:47 Найти цитируемый пост)
при нажатии на клавишу клавиатуры 

Вот. Теперь стало ясней. smile А то вы писали про какую-то кнопку. А что за кнопка не понятно. Как я понял вы делаете что-то типа стамины smile

Для начала, попробуйте вместо OnKeyPress воспользоваться OnKeyDown и OnKeyUp.

Автор: Simon14 14.5.2009, 12:52
На OnKeyDown  без изменений а на OnKeyUp проверка не работает

Автор: artsb 14.5.2009, 13:20
Цитата(Simon14 @  14.5.2009,  12:52 Найти цитируемый пост)
на OnKeyUp проверка не работает

Что именно не работает? Кстати, вы используете обработчик формы? Может лучше хук поставить... На форуме обсуждалось.

Автор: Simon14 14.5.2009, 13:24
проверка нажатого символа, и определенного cимвола в тексте. как я понял ето обработчик if(Key == panel2_text[1])

Автор: froex 14.5.2009, 22:16
Я один не понимаю, что пишет Simon14? Я про пунктуацию - чего-то не могу связать слова :\

Автор: Vaulter 14.5.2009, 22:50
Цитата(Simon14 @  9.5.2009,  12:47 Найти цитируемый пост)
 else
  {
   } }
   else {}
}

ЖЖОШЬ!!!

 smile  smile 
я понимаю, что сделать тебе это надо было еще вчера.....
но, та структура программы, что у тебя есть УЖЕ не позволяет тебе в ней разобратся и исправить
Цитата

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
   if (ProgressBar1->Position != 0)
ProgressBar1->Position--;
   if ( sec < 59)
sec++;
else
{
sec = 0;


откуда дровишки, переменные????

*.hpp какие? 


Теперь о возможных причинах: для меня более вероятно, что пресловутый медиаплейер - лажает. причем как раз на высвобождении....

отсюда, ИМО, симптом:
Цитата

а потом время скачком наростает


как решение, пошарил бы под рукой в поисках другого компонента плейера smile
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)