Newsgroup: it.comp.programmare.win32
Titolo: :-( sti cavolo di thread!!!

allora: come avrete capito stň lavorando con i thread,il problema č che
facendo partire un thread che sposta una palla,tutto funziona
xfettamente,quando perň parte
anche il secondo thread che muove una raccheta,la palla incomincia a
lasciare scie...
credo che ciň derivi appunto dal fatto ke il processore faccia avanzare
virtualmente parallelamente i 2 thread, con xň nn ottimi risultati...
xkč?????
come faccio ad evitare ciň????
grazie
K

 ha scritto nel messaggio
news:CzwP6.3639$WT5....@news.infostrada.it...


> Prova a postare il codice per disegnare di tutte le funzioni ed i thread.
struct punto{
   short x;
   short y;
   }racca[7],old_racca;
while (GetMessage(&msg, NULL, 0, 0))
{
  if(msg.message==WM_KEYDOWN)
  {
       tasto=msg.wParam;
       if(tasto==37||tasto==39)
        si=0;
  }
....
}
void _cdecl nuovo_punto(void *)
{
file://DWORD temp=timeGetTime();
short x=rand()%xMax;
short y=rand()%yMax;
short old_x=x;
short old_y=y;
COLORREF col=RGB(rand()%255,rand()%255-200,rand()%255+200);
COLORREF bianco=RGB(255,255,255);
short direzione_x=1;
short direzione_y=1;
short direzione_max=1;
short max=4;
static short cont=0;
static short cont_max=0;
 while(cont!=cont_max)
 {
  cont++;
  x=rand()%xMax;
  y=rand()%yMax;
 }
 cont_max++;
 cont=0;
 stampa(x,y,col,max);
 while(1)
 {
  Sleep(2);
  if(direzione_x>0)
   x++;
  else
   x--;
  if(direzione_y>0)
   y++;
  else
   y--;
  stampa(old_x,old_y,bianco,max);
  stampa(x,y,col,max);
  old_x=x;
  old_y=y;
  if(x>xMax||x<0)
  {
   direzione_x=-direzione_x;
   Beep(0x7F,50);
   col=RGB(rand()%255,rand()%255,rand()%255);
  /* if(direzione_max>0)
    max++;
   else
    max--;
   if(max==30 || max==0)
    direzione_max=-direzione_max;*/
  }
  if(y>yMax||y<0)
  {
     direzione_y=-direzione_y;
   Beep(0x25,50);
   col=RGB(rand()%255,rand()%255,rand()%255);
   /*if(direzione_max>0)
    max++;
   else
    max--;
   if(max==30 || max==0)
    direzione_max=-direzione_max;*/
  }
  for(short e=0;e<6;e++)
  {
   if(y+max==racca[e].y && (x+max>racca[e].x && x+max<racca[e].x+5)){
    direzione_y=-direzione_y;
    Beep(0x25,50);
  }}
 }
}
void _cdecl racchetta (void *)
{
short max=10;
COLORREF col=RGB(0,0,200);
COLORREF bianco=RGB(255,255,255);
char lunghezza=6;
char direzione;
char i=0;
racca[0].x=300;
racca[0].y=yMax-100;
for(short e=1;e<lunghezza;e++)
{
 racca[e].x=racca[e-1].x+max;
 racca[e].y=racca[0].y;
}
 while(1)
 {
 if (tasto==37)
 {
  if(si==0)
  {
   racca[0].x-=max;
   old_racca=racca[lunghezza];
   for(i=lunghezza;i>0;i--)
   {
    racca[i].x=racca[i-1].x;
    racca[i].y=racca[i-1].y;
   }
   si=1;
  }
 }
 if (tasto==39)
 {
  if(si==0)
  {
   racca[lunghezza].x+=max;
   old_racca=racca[0];
   for(i=0;i<lunghezza;i++)
    racca[i].x=racca[i+1].x;
    racca[i].y=racca[i+1].y;
   }
   si=1;
  }
 }
 stampa(old_racca.x,old_racca.y,bianco,max);
 for(short a=0;a<=lunghezza;a++)
  stampa(racca[a].x,racca[a].y,col,max);
 }
}
void stampa (short x,short y,COLORREF col,short max)
{
 short a=0;
 short b=0;
 while(a!=max)
 {
  while(b<=a)
  {
   SetPixel(hFinestra,x+a,y+b,col);
   b++;
  }
  b=0;
  a++;
 }
 a=0;
 b=0;
 while(a!=max)
 {
  while(b<=a)
  {
   SetPixel(hFinestra,x+b,y+a,col);
   b++;
  }
  b=0;
  a++;
 }
}