Strona 1 z 1

C++ wątek ze wskaźnikami

: 24 lipca 2010, 14:03
autor: Majma
Zrobiłem program, który tworzy wątek i porównuje 2 liczby(zmiennoprzecinkowe) i wybiera mniejszą. Zrobiłem i działa normalnie ale niestety muszę jeszcze go tak zmienić aby wątek tylko porównywał liczby a dopiero w głównej funkcji "main" przekazywał wynik. Potrzeba "printf" usunąć z wątku i jakoś przekazać wynik do głównej funkcji by dopiero w ostatnim "printf" w programie pobierało wynik. Kombinowałem różnie ale nie działa albo nie chce mi pokazywać wyniku. Jakby ktoś coś podpowiedział było by dobrze.

Kod: Zaznacz cały

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

/* oblicza mniejsza liczbe
*/
void* mniej (void* arg)
{
  double *tab;
  tab = (double*) arg;

    printf("dwie zmienne to:%lf,%lf\n", tab[0],tab[1]);
    if(tab[0]<tab[1])
        printf("MNIEJSZA TO %lf\n", tab[0]);
   if(tab[1]<tab[0])
     printf("MNIEJSZA TO %lf\n	", tab[1]);
    

}
int main ()
{
  pthread_t thread;
  double ta[2];
  double *wynik;

  printf("wpisz pierwsza zmienna \n");
scanf("%lf", &ta[0]);
  printf("wpisz 2 zmienna \n");
scanf("%lf", &ta[1]);


  if (pthread_create (&thread, NULL, &mniej, (void*) &ta));      
          //printf("blad \n");

  /* Czekaj na zakonczenie watka i odbierz wynik. */
  if  (pthread_join (thread, (void **) &wynik)); {
    //printf("blacz przy konczeniu watku\n");
  	exit(2);
  	}
  /* Wydrukuj mniejsza liczbe.  */
  printf("Mniejsza liczba to %lf\n", *wynik);

  return 0;
}

: 24 lipca 2010, 14:54
autor: grzesiek
Nigdy nie robiłem wątków, ale na programowaniu to się troszkę znam ;)
Ja to bym zrobił tak, albo wynik jest zmienna globalną i funkcja mniej do niej zapisuje wynik, albo do wspomnianej funkcji dodajesz jeszcze jedne parametr wynik i to by było najbardziej eleganckie rozwiązanie.

: 24 lipca 2010, 15:29
autor: Majma
Próbowałem już właśnie zamiast tych printf wstawiać parametr wynik i przypisałem do niego te wartości tablicowe ale coś chyba jeszcze trzeba dodać bo w wyniku pokazywało "Liczba mniejsza to 0" zamiast mniejszej liczby.... nie wiem właśnie co jeszcze musze dopisać żeby ten wynik odczytywany był w tej głównej funkcji (tam już na końcu )

: 24 lipca 2010, 16:06
autor: grzesiek
Coś Ty chyba nie czujesz tego programowania ;)
Ja to bym zmienił te linnie:

Kod: Zaznacz cały

...
void* mniej (void* arg, double wynik)
{
...
    if(tab[0]<tab[1])
    {
        printf("MNIEJSZA TO %lf\n", tab[0]);
        wynik = tab[0];
    }
    else
    {
        printf("MNIEJSZA TO %lf\n", tab[1]);
        wynik = tab[1];   
    }
    // a może sa takie same, aa 
}
int main ()
{
...
  double wynik;
...



  if (pthread_create (&thread, NULL, &mniej, (void*) &ta), (void *) &wynik);      
          //printf("blad \n");
// po co to??
/// -----
  /* Czekaj na zakonczenie watka i odbierz wynik. */
  if  (pthread_join (thread, (void **) &wynik)); {
    //printf("blacz przy konczeniu watku\n");
      exit(2);
      }
/// -----
  /* Wydrukuj mniejsza liczbe.  */
  printf("Mniejsza liczba to %lf\n", &wynik);

  return 0;
}
Tylko to tak na oko, bez kompilatora.