Mam funkcję:
bool TForm1::strzal(int x, int y, int xd, int yd, int zasieg){//startowy, docelowy, zasięg
TImage *pocisk;
pocisk=new TImage(Form1);
if((xd==x)&&(y==yd))return 0;
int xr=0, yr=0, d, xb=xd-x, yb=yd-y, xw=1, yw=1;//reszta, dłuższy, boki, wektor
if(yb<0)yb=-yb;
if(xb<0)xb=-xb;
if(xd<x)xw=-1;
if(yd<y)yw=-1;
if(xb>yb)d=xb; else d=yb;
pocisk->Visible=true;
pocisk->Parent=Form1;
pocisk->AutoSize=true;
pocisk->Picture=bullet;
sndPlaySound("gun.wav", SND_ASYNC);
//przesuwanie<br>
for(int i=0; i<zasieg; i++){
xr+=xb%d;
if(xr>=d){xr-=d; x+=xw;}
x+=(xb/d)*xw;
yr+=yb%d;
if(yr>=d){yr-=d; y+=yw;}
y+=(yb/d)*yw;
pocisk->Left=x-1;
pocisk->Top=y-1;
//kolizja<br>
if(trafienie(beczka1, x, y)){buum(beczka1); delete pocisk; return true;}//funkcja trafienie odejmie hp
if(pixel[x][y]){delete pocisk; return false;}
Application->ProcessMessages(); Sleep(10);
}}
i gdy wywołuję ją dwa razy, tak, że druga jest wywoływana zanim pierwsza zwróci wartość, to pierwsza się ,,zamraża'' na czas wykonania drugiej (co oczywiście nie jest porządane), widać to po obiekcie pocisk. Czy ktoś wie czym to jest spowodowane (może
Application->ProcessMessages(); Sleep(10);
, jednak nie umiem zatrzymać pętli inaczej bez wstrzymywania całej reszty programu, więc nie mam jak tego sprawdzić) i jak można ten problem obejść?
P.S. Zauważyłem, że blokują też wyłączenie programu.