TDateTime t,tpause;
bool stop=false;
tpause=StrToDateTime("00:00:05");
t=Now();
while(!stop)
{
stop=(Now()-t)>tpause;
Application->ProcessMessages();
}
return;
Рисавание графиков
Требуется нарисовать график y = sin(45*t), причем так, что бы он рисовался постепенно. Я начал делать через Imagе, но не знаю как заставить изображение появляться постепенно(( При использовании sleep(100) окно виснет. Помогите, плиз. Если есть другой способ нарисовать, то тоже можете сказать:)
Вариант №2 - вынести рисование в отдельный поток и там ставить Sleep(100)
вместо Sleep в цикле можно использовать вот такую "прозрачную" паузу:
Цитата: tiger512
Требуется нарисовать график y = sin(45*t), причем так, что бы он рисовался постепенно. Я начал делать через Imagе, но не знаю как заставить изображение появляться постепенно(( При использовании sleep(100) окно виснет. Помогите, плиз. Если есть другой способ нарисовать, то тоже можете сказать:)
Для начала советую понять самому, почему "окно виснет". Если поймете, поймете и как сделать правильно.
Цитата: Anton Chik
вместо Sleep в цикле можно использовать вот такую "прозрачную" паузу:
http://forum.codenet.ru/showthread.php?t=26832&highlight=%EF%E0%F3%E7%E0
http://forum.codenet.ru/showthread.php?t=26832&highlight=%EF%E0%F3%E7%E0
это называется - поток через жопу, старики рассказывали, что так делали в Windows 3.1:)))
Код:
Что там надо создать и как. Почему поток виснет я догадываюсь)))
А вот как сделать так, что бы не вис - нет:)
P.S Я начал делать через таймер.
Цитата:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
float T = 2*3.14*5;
x = 200*sin(omega1*itime+fi1);
y = 200*cos(omega2*itime+fi2);
x = floor(x);
y = floor(y);
Image1->Canvas->MoveTo(floor(x)+center_x,-floor(y)+center_y);
Image1->Canvas->LineTo(floor(x)+center_x+1,-floor(y)+center_y+1);
itime++;
{
float T = 2*3.14*5;
x = 200*sin(omega1*itime+fi1);
y = 200*cos(omega2*itime+fi2);
x = floor(x);
y = floor(y);
Image1->Canvas->MoveTo(floor(x)+center_x,-floor(y)+center_y);
Image1->Canvas->LineTo(floor(x)+center_x+1,-floor(y)+center_y+1);
itime++;