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

Sleep(1000);

dział ogólny

Sleep(1000);

Nowy postprzez Manianass » poniedziałek, 27 listopada 2017, 21:21

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);

}
Avatar użytkownika
Manianass
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): środa, 11 listopada 2015, 00:45
Lokalizacja: Lubin
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: win 7
Kompilator: Builder C++
Gadu Gadu: 0
    Windows 7Chrome

Re: Sleep(1000);

Nowy postprzez polymorphism » wtorek, 28 listopada 2017, 12:17

Użyj timera (TTimer).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: Sleep(1000);

Nowy postprzez Manianass » wtorek, 28 listopada 2017, 17:04

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.
Avatar użytkownika
Manianass
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): środa, 11 listopada 2015, 00:45
Lokalizacja: Lubin
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: win 7
Kompilator: Builder C++
Gadu Gadu: 0
    Windows 7Chrome

Re: Sleep(1000);

Nowy postprzez Cyfrowy Baron » wtorek, 28 listopada 2017, 18:15

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;}
}

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Manianass
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Sleep(1000);

Nowy postprzez Manianass » czwartek, 30 listopada 2017, 16:42

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 :)
Avatar użytkownika
Manianass
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): środa, 11 listopada 2015, 00:45
Lokalizacja: Lubin
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: win 7
Kompilator: Builder C++
Gadu Gadu: 0
    Windows 7Chrome

Re: Sleep(1000);

Nowy postprzez Cyfrowy Baron » czwartek, 30 listopada 2017, 17:50

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();
 }
}
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Sleep(1000);

Nowy postprzez Manianass » czwartek, 30 listopada 2017, 19:43

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 :)
Avatar użytkownika
Manianass
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): środa, 11 listopada 2015, 00:45
Lokalizacja: Lubin
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: win 7
Kompilator: Builder C++
Gadu Gadu: 0
    Windows 7Chrome

Re: Sleep(1000);

Nowy postprzez Cyfrowy Baron » piątek, 1 grudnia 2017, 12:22

Symulujesz kliknięcie w innym programie czy w tym samym?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Sleep(1000);

Nowy postprzez Manianass » piątek, 1 grudnia 2017, 13:36

W innym w grze. Bo normalnie ręką boli od klikania. I myszką wysiada.
Avatar użytkownika
Manianass
Bladawiec
Bladawiec
 
Posty: 27
Dołączył(a): środa, 11 listopada 2015, 00:45
Lokalizacja: Lubin
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: win 7
Kompilator: Builder C++
Gadu Gadu: 0
    NieznanyFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 22 gości

cron