• 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]

VPS Starter Arubacloud
0 głosów
1,318 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,878 wizyt
0 głosów
1 odpowiedź 294 wizyt

92,452 zapytań

141,262 odpowiedzi

319,077 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...