• 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
259 wizyt
pytanie zadane 13 listopada 2015 w C i C++ przez Robert Komendarek Nowicjusz (140 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,120 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 (140 p.)
A jakie śą funkcjie nie blokujące ? (Które działają jak sleep)
0 głosów
odpowiedź 13 listopada 2015 przez diablol Pasjonat (23,020 p.)
Chodzi ci o zatrzymanie piłki na jakiś czas ?
komentarz 14 listopada 2015 przez Robert Komendarek Nowicjusz (140 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,780 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 (140 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,850 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 (140 p.)
Ok, nie ma problemu już skróciłem kod. :)

Podobne pytania

0 głosów
4 odpowiedzi 117 wizyt
0 głosów
1 odpowiedź 97 wizyt

35,203 zapytań

71,424 odpowiedzi

136,504 komentarzy

17,073 pasjonatów

Przeglądających: 222
Pasjonatów: 14 Gości: 208

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...