CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Sleep(1000);
Strona 1 z 1

Sleep(1000);

Nowy postNapisane: poniedziałek, 27 listopada 2017, 21:21
przez Manianass
Witam,
Pisze program który ma za zadanie ""klikać"" myszką co około sekundy w różnych miejscach i to działa tylko mam problem jak che wyświetlić coś np w Label to wyświetla dopiero po zakończeniu całej obsługi wywołanej zdarzeniem OnClik przycisku.

zrobiłem sonie testowy program teraz i tez tak samo działa dopiero wyświetla wynik na koniec a nie tak jak powinno co sekunde
C++6 Builder

Proszę o jakiś pomysł jak to rozwiązać.
KOD cpp:     UKRYJ  

void __fastcall TForm1::Button3Click(TObject *Sender)
{
int i = 0;
Label1->Caption=i;
i++;
Sleep(1000);

Label1->Caption=i;
i++;
Sleep(1000);

Label1->Caption=i;
i++;
Sleep(1000);

Label1->Caption=i;
i++;
Sleep(1000);
Label1->Caption=i;
i++;
Sleep(1000);

Label1->Caption=i;
i++;
Sleep(1000);
Label1->Caption=i;
i++;
Sleep(1000);

Label1->Caption=i;
i++;
Sleep(1000);

}

Re: Sleep(1000);

Nowy postNapisane: wtorek, 28 listopada 2017, 12:17
przez polymorphism
Użyj timera (TTimer).

Re: Sleep(1000);

Nowy postNapisane: wtorek, 28 listopada 2017, 17:04
przez Manianass
Próbowałem ale tez jakoś nie wychodzi oto kod
Kod: Zaznacz cały
while  (czas == 3)
{
Timer1->Enabled=True;
}

Timer1->Enabled=False;
czas=0;
Label1->Caption=i;
Label3->Caption=czas;
i++;


while  (czas == 3)
{
Timer1->Enabled=True;
}

Timer1->Enabled=False;

czas=0;


działa tak samo jak Sleep :(
i prubowałem w funkcjii dodac Timer ale pokazywało ze go nie widzi, a jak do funkcij wstawiłem sleep to tez nie działało tak jak chiałem.

Re: Sleep(1000);

Nowy postNapisane: wtorek, 28 listopada 2017, 18:15
przez Cyfrowy Baron
KOD cpp:     UKRYJ  
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int i = 0;
Label1->Caption=i;
i++;
Sleep(1000);
Application->ProcessMessages();
Label1->Caption=i;
i++;
Sleep(1000);
Application->ProcessMessages();
Label1->Caption=i;
i++;
Sleep(1000);
Application->ProcessMessages();
Label1->Caption=i;
i++;
Sleep(1000);
Label1->Caption=i;
i++;
Sleep(1000);
Application->ProcessMessages();
Label1->Caption=i;
i++;
Sleep(1000);
Label1->Caption=i;
i++;
Sleep(1000);
Application->ProcessMessages();
Label1->Caption=i;
i++;
Sleep(1000);
Application->ProcessMessages();
}



Użyj jednak Timer'a. Interval ustaw na 1000 we właściwościach Timer, a kod umieść w zdarzeniu OnTime. Oczywiście, nie używasz żadnej pętli. Jeżeli Interval jest równy 1000 to timer tyka co sekundę, czyli kod umieszczony w zdarzeniu OnTime jest wywoływany cyklicznie co sekundę.

Ten kod niżej da dokładnie ten sam efekt co kod wyżej i w odróżnieniu od funkcji Sleep nie będzie wstrzymywał kolejki komunikatów, czyli nie będzie zamrażał aplikacji na sekundę co sekundę.
KOD cpp:     UKRYJ  
void __fastcall TForm1::Button3Click(TObject *Sender)
{
 Timer1->Interval = 1000;
 Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
static int i = 0;
Label1->Caption = i;

i++;

if( i >= 8) { i = 0; Timer1->Enabled = false;}
}

Re: Sleep(1000);

Nowy postNapisane: czwartek, 30 listopada 2017, 16:42
przez Manianass
Dzięki Cyfrowy Baron
Wystarczyło wstawienie

Application->ProcessMessages(); i działa tak jak chciałem wiem ze blokuje ale wyświetla wszystko tak jak powinno a nie dopiero po zakończeniu obsługi całego klawisza :)

nie wiem jak działa ale dział OK :)

Re: Sleep(1000);

Nowy postNapisane: czwartek, 30 listopada 2017, 17:50
przez Cyfrowy Baron
Wiem, że działa, ale kod z tą funkcją Sleep jest bez sensu. Ten program ma chyba tylko i wyłącznie charakter dekoracyjny?! Poza tym po co powtarzać cały ten kod, skoro można użyć pętli.

KOD cpp:     UKRYJ  
void __fastcall TForm1::Button3Click(TObject *Sender)
{
 for (int i = 0; i <= 8; i++)
 {
   Label1->Caption=i;
   Sleep(1000);
   Application->ProcessMessages();
 }
}

Re: Sleep(1000);

Nowy postNapisane: czwartek, 30 listopada 2017, 19:43
przez Manianass
Kod był poglądowy żebym się nie pogubił :)

kod w programie

KOD cpp:     UKRYJ  

 xg=665;
 yg=437;
sprawdzam=kolorek(xg,yg,"94 82 60","82 71 52");

if (sprawdzam == 1)
{
 Label30->Caption="ok";
 ListBox1->Items->Add("w pracy");
}
else
{
 Label30->Caption="w domu";
 klik(xg,yg);   // klikniecie gośćia
 klik(gx,gy);   // klikniecie przygoda /skarb
 klik(gxx,gyy); // klikniecie która opcja
 klik(656,565); // klik ok
 klik(684,664); // klik gwiazda
}

 


funkcja klik

KOD cpp:     UKRYJ  

void klik (int xx, int yy)
{
 SetCursorPos(xx, yy);
 mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
 mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
 Sleep(1000);
 Application->ProcessMessages();
}

 


I w tej funkij dopiero wykorzystuje opóźnienie. Jak bym wstawił taki kod wczesniej to bym potem miał problem co gdzie przerobić żeby działało :)

Re: Sleep(1000);

Nowy postNapisane: piątek, 1 grudnia 2017, 12:22
przez Cyfrowy Baron
Symulujesz kliknięcie w innym programie czy w tym samym?

Re: Sleep(1000);

Nowy postNapisane: piątek, 1 grudnia 2017, 13:36
przez Manianass
W innym w grze. Bo normalnie ręką boli od klikania. I myszką wysiada.