Witam, mam do napisania pewien program oparty na wątkach, opisze go w skrócie. Chodzi o filtrowanie wczytanego przez uzytkownika obrazu, mam do zrobienia kilka filtrow, kazdy w osobnym watku i kazdy ma dzialac na wlasnej kopii obrazka a potem wczytywac (po kolei) do watku glownego i wyswietlac poszczegolne filtry. Powiedzmy ze mam na to pomysl, problem jest w tym ze program ma rowniez reagowac na to co robi uzytkownik, tzn jesli jest w trakcie filtrowania jakiegos obrazka, a uzytkownik wpisze juz nowa nazwe, to program ma przerwac filtrowanie i zaczac filtrowac nowy obrazek. Jesli obraz zdazy sie przefiltrowac to czeka az uzytkownik poda nowa nazwe. Potrzeby jest do tego jakis watek nadzorujacy. W zwiazku z tym moje pytanie brzmi, w jaki sposob (nie znalazlem zadnej funkcji) zrobic aby mozna bylo watek uruchomic od nowa (bez zabijania go i tworzenia od nowa). Wymyslilem za watek nadzorujacy wygladalby mniej wiecej tak:
void nadzor(char nazw[100])
{
char tmp[100] = nazw;
while(1)
{
if(strcmp(tmp,nazw) != 0)
{
//tu wlasnie musze zrobic cos aby watki startowaly od nowa//
tmp = nazw;
}
}
}
ma to dzialac tak ze watek caly czas bedzie sprawdzal zmienna nazwa (zmienna globalna, wprowadzona przez uzytkownika) i jesli ulegnie zmianie to uruchomi ponownie watki, do tmp przypisze nowa nazwe i znow to samo
watki z filtrami napisalem w ten sposob:
void *filtr1(void *mem)
{
while(1)
{
//tworzy wlasna kopie obrazka
char *tab;
tab = (char *)malloc(filesize*sizeof(char));
memcpy(tab,p,filesize);
//tu bedzie jakis filtr
//////////////////////
//filtr1
//////////////////////
//zapisuje przefiltorwany obraz do pamieci
//zastosuje mutexy aby watki nie zapisywaly do wspolnej pamieci jednoczesnie
pthread_mutex_lock(&mut1);
memcpy(p,tab,filesize);
pthread_mutex_unlock(&mut1);
//zwalnia pamiec usuwajac swoja kopie obrazka
free(tab);
//oczekiwanie watku
sem_init(&s1,0,0);
sem_wait(&s1);
}
}
void *mem jest nieuzywane, p to wskaznik do zmapowanej pamieci w watku glownym.
Mam nadzieje ze wszystko jasno opisalem :) z gory dzieki za odpowiedz
pozdrawiam