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

0 głosów
210 wizyt
pytanie zadane 13 listopada 2015 w C i C++ przez użytkownika Robert Komendarek Nowicjusz (140 punkty)
edycja 14 listopada 2015 przez użytkownika 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 użytkownika Bartek85 Mądrala (7,080 punkty)
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 użytkownika Robert Komendarek Nowicjusz (140 punkty)
A jakie śą funkcjie nie blokujące ? (Które działają jak sleep)
0 głosów
odpowiedź 13 listopada 2015 przez użytkownika diablol Pasjonat (21,780 punkty)
Chodzi ci o zatrzymanie piłki na jakiś czas ?
komentarz 14 listopada 2015 przez użytkownika Robert Komendarek Nowicjusz (140 punkty)
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 użytkownika emSon Stary wyjadacz (10,720 punkty)
Użyj zegara i blokuj tylko jedną funkcję na jakiś czas. Ewentualnie możesz zamontować pare wątków.
komentarz 14 listopada 2015 przez użytkownika Robert Komendarek Nowicjusz (140 punkty)
edycja 14 listopada 2015 przez użytkownika 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 użytkownika Bravo555 Gaduła (3,850 punkty)

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 użytkownika Robert Komendarek Nowicjusz (140 punkty)
Ok, nie ma problemu już skróciłem kod. :)

Podobne pytania

0 głosów
1 odpowiedź 54 wizyt
0 głosów
1 odpowiedź 92 wizyt
pytanie zadane 28 lipca 2015 w C i C++ przez użytkownika wisnia123qwe Nowicjusz (140 punkty)
0 głosów
1 odpowiedź 58 wizyt
...