pthread - ponowne uruchamianie wątku

0

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

0

Z tego co się orientuję do wstrzymania wątku służy funkcja SuspendThread a do wznawiania ResumeThread.
Więcej na: http://ics.p.lodz.pl/~dpuchala/Prwsp/API.pdf

1 użytkowników online, w tym zalogowanych: 0, gości: 1