Witam,
Pierwszy raz używam wątków i mam problem.
Chce zrobić coś jak skrzyżowanie i chce aby każdy samochód był wątkiem.
Mam następujące pytania:
1. Czy kilka wątków może w tym samym czasie korzystać z jednej metody/funkcji ?
2. Jak wygląda tworzenie zmiennych ? Jedna stworzona w danej funkcji stworzy się tylko raz i będzie wspólna dla wszystkich wątków ?
3. Jeśli jest wspólna to jak to zrobić, by każdy wątek w jednej funkcji tworzył zmienne widoczne tylko dla siebie ?
tzn. :
wątek1 -> funkcja -> zmienne miejsca i prędkości -> poruszanie się
wątek2 -> funkcja -> zmienne miejsca i prędkości -> poruszanie się (chciałbym , aby te zmienne miały inne własne wartości)
4. Ma to wyglądać tak, że :
tworzy się wątek -> w wątku tworzy się samochód -> w wątku pętla nieskończona ruchu samochodu
tworzy się wątek2 -> w wątku tworzy się samochód2 -> w wątku pętla nieskończona ruchu samochodu2
5. Jak zainicjować zmienne, by każda ze zmiennych była używana tylko w jednym wątku,a w drugim inna zmienna o tych samych właściwościach.
Dam kawałek kodu:
main.cpp
Samochod samochod;
samochod.tworzenie( samochod );
pthread_create( & samochod.watek[ 0 ], NULL, & p_dodawanie,( void * ) & samochod );
dodawanie.cpp
void Samochod::dodawanie( Samochod & samochod )
{
pthread_create( & samochod.watek[ 1 ], NULL, & p_poruszanie,( void * ) & samochod );
pthread_create( & samochod.watek[ 2 ], NULL, & p_poruszanie,( void * ) & samochod );
}
poruszanie.cpp
void poruszanie( Samochod & samochod )
{
double x, y;
x = 100;
y = 50;
cout << "Nowy watek" << endl;
cout << x << endl;
cout << y << endl;
if( getpixel( samochod.bufor, x + 40, y ) != makecol( 255, 127, 39 ) )
{
while( x < 500 )
{
x += 0.1;
y += 0.1;
cout << x << endl;
masked_blit( samochod.car, samochod.bufor, 0, 0, x, y, samochod.car->w, samochod.car->h );
blit( samochod.bufor, screen, 0, 0, 0, 0, 800, 600 );
}
}
}