• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ Builder 6 | Jak używać Sleep'a aby nie freezowało całego programu? [ankieta]

Object Storage Arubacloud
0 głosów
1,329 wizyt
pytanie zadane 13 listopada 2015 w C i C++ przez Robert Komendarek Nowicjusz (160 p.)
edycja 14 listopada 2015 przez Robert Komendarek

Co zrobić aby przy pomyłce tylko piłka miała Sleep(700) jakby co to jest "void sleep()"  Mirosław mówił że  Application->ProcessMessages(); to robi lecz mi to nie działa :/

 

Jeśli ma ktoś trochę czasu i chcę pomóc daję link do całego projektu: https://drive.google.com/file/d/0B2T3ok-mzTN6ampibVhaYTYxcm8/view?usp=sharing

​
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "windows.h"
#include "mmsystem.h"

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TForm1 *Form1;
int x=-10;
int y=-10;
int pkt1=0;
int pkt2=0;

void sleep()
{
     Application->ProcessMessages();Application->ProcessMessages(); Sleep(700);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer_pilkaTimer(TObject *Sender)
{

        b->Left-=x;
        b->Top-=y;

        //odbij od góry

        if(b->Top-5 <= tlo->Top)
        {
         sndPlaySound("snd/1", SND_ASYNC);
         y = -y;
         }
        // od dołu
        if(b->Top+b->Height+5 > tlo->Height)
         {
         sndPlaySound("snd/1", SND_ASYNC);
         y = -y;
         }

        // od prawej
        //if(b->Left + b-> Width >= tlo->Width) x = -x;


        if (b->Left   <= p1->Left + p1->Width &&  b->Top-b->Height/2 >= p1->Top-5 &&
            b->Top+b->Height <= p1->Top+p1->Height+5  )
         {
         if(x>0)
         {
         x=-x ;sndPlaySound("snd/1.wav", SND_ASYNC);
         }
        }
        if (b->Left+b->Width  >= p2->Left  &&  b->Top >= p2->Top-5 &&
            b->Top+b->Height <= p2->Top+p2->Height+5  )
        {
          if(x<0)
         {
         x=-x ;sndPlaySound("snd/1.wav", SND_ASYNC);
         }
        }

        //skucha  lewa
        if(b->Left+b->Width <= p1->Left-20)
        {

                sndPlaySound("snd/2.wav", SND_ASYNC);
                 pkt2+=1;
                Label6->Caption=pkt2;

                  sleep();
                b->Top=240;
                 b->Left=640;
        }




           //skucha  prawa
        if(b->Left >= p2->Left+20)
        {

               sndPlaySound("snd/2.wav", SND_ASYNC);


                pkt1+=1;
                Label5->Caption=pkt1;

                 sleep();
                b->Top=240;
                 b->Left=640;


        }
        if(pkt1==Edit1->Text)
        {
           pkt1=0;
             pkt2=0;

           Label11->Visible=true;
            Button3->Visible=true;
            Timer_pilka->Enabled=false;
           b->Top=216;
           b->Left=616;
        }
        else if(pkt2==Edit1->Text)
        {
           pkt1=0;
           pkt2=0;

           Label12->Visible=true;
           Button3->Visible=true;
           Timer_pilka->Enabled=false;
           b->Top=216;
           b->Left=616;
        }




                      


}
//---------------------------------------------------------------------------

Możliwe odpowiedzi:
Było (2 głosów, 100%)

4 odpowiedzi

0 głosów
odpowiedź 13 listopada 2015 przez Bartek85 Mądrala (7,440 p.)
Jeżeli nie chcesz aby program sie "freezował", to nie używaj funkcji blokujących( i które trwają długo) na głównym wątku programu...

Hint: Funkcja Sleep jest blokująca ;)
komentarz 14 listopada 2015 przez Robert Komendarek Nowicjusz (160 p.)
A jakie śą funkcjie nie blokujące ? (Które działają jak sleep)
0 głosów
odpowiedź 13 listopada 2015 przez Patryk Krajewski Nałogowiec (26,170 p.)
Chodzi ci o zatrzymanie piłki na jakiś czas ?
komentarz 14 listopada 2015 przez Robert Komendarek Nowicjusz (160 p.)
Tak aby po pomyłce piłka trafiła na środek, poczekała 0,5 sekundy a następnie ruszyła dalej. (Pamiętając aby paletki i wszystkie inne timer'y działały) :).
0 głosów
odpowiedź 13 listopada 2015 przez emSon Stary wyjadacz (10,480 p.)
Użyj zegara i blokuj tylko jedną funkcję na jakiś czas. Ewentualnie możesz zamontować pare wątków.
komentarz 14 listopada 2015 przez Robert Komendarek Nowicjusz (160 p.)
edycja 14 listopada 2015 przez Robert Komendarek
Dzięki, nie pomyślałem o tym, lecz jakiej funkcji użyć aby cały program się nie blokował jeśli nawet stworzyłem osobny timer do tego to i tak sleep będzie oddziałowywał na cały program ? :)
0 głosów
odpowiedź 13 listopada 2015 przez Bravo555 Gaduła (3,970 p.)

Na przyszłość proszę - wklej jak najmniej kodu, żeby odtworzyć problem. Wklejanie całego, 240 linijkowego programu nie pomaga w poszukiwaniu błędu, kiedy trzeba brnąć przez kod z nim nie powiązany.

komentarz 14 listopada 2015 przez Robert Komendarek Nowicjusz (160 p.)
Ok, nie ma problemu już skróciłem kod. :)

Podobne pytania

0 głosów
4 odpowiedzi 2,901 wizyt
0 głosów
1 odpowiedź 299 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...