Moim celem jest napisanie programu który posortuje 10 tablic wielowątkowo.
Podaje mu ilość wątków, następnie każdy wątek sortuje jedna tablice, po posortowaniu zabiera się za kolejna i aż do końca.
Mam problem własnie z "zabieraniem się za kolejną"
Ta część kodu ma za zadanie właśnie utworzenie określonej ilości wątków, a po zakończeniu pracy któregoś z nich dać mu kolejna tablicę
Funkcja ma na celu zwrocenie indeksu watku ktory sie juz skonczyl
int Test2::getThreadIndex(HANDLE* handle,int size){
for(int i = 0;i<size;i++){
if(WaitForSingleObject(handle[i],0)==WAIT_OBJECT_0)
return i;
}
}
alreadySorted - ile tablic jest już posortowanych
threadCount - ilość jednocześnie pracujących wątków
hsC - tablica HANDLE'row z watkami
temp - HANDLE tymczasowy
for(int i = 0;i<threadCount;i++){ //tworze okreslona ilosc watkow
hsC[i] = (HANDLE)_beginthreadex(NULL, 0, threadBubble, (void*) testC[i], 0, 0);
alreadySorted+=1; //po ich wykonaniu bede miec "tyle" posortowanych tablic
}
while(1){
//jesli dostane timeouta znaczy ze jeszcze zaden watek sie nie skonczyl
if(WaitForMultipleObjects( 1, & hsC[0], FALSE,0)==WAIT_TIMEOUT)
WaitForMultipleObjects( 1, & hsC[0], FALSE, INFINITE );//wiec czekam az ktorykolwiek sie skonczy
temp = getThreadIndex(hsC,threadCount); //pobieram indeks skonczonego watku
if(alreadySorted!=10)
{ //i uruchamiam kolejny
hsC[temp] = (HANDLE)_beginthreadex(NULL, 0, threadBubble, (void*) testC[alreadySorted], 0, 0);
alreadySorted += 1;
}
else //jesli mam 10 tablic posortowanych koniec
break;
} //i czekam aż reszta wątków się skończy
WaitForMultipleObjects(threadCount-1, &hsC[0],TRUE,INFINITE);
Niestety wynikiem tego programu jest to ze na początku faktycznie tworzy x wątków ale nowe watki tworzy dopiero po skończeniu pracy tych x wątków a nie po skończeniu pracy któregokolwiek z nich