Premetto che sono un "programmatore" alle prime armi con qualche mese di studio alle spalle e niente più, sto svolgendo un esercizio con l'ausilio dei thread. però dal mio codice c'è qualcosa che non torna nel senso funziona, fa i calcoli ma rispetta solo una delle tue condizioni per cui dovrebbe uscire dal ciclo.
IL codice è il seguente
Code: Select all
#include <stdio.h>
#include <pthread.h>
#include <time.h>
#include <math.h>
int timeout = 0;
void *thread_check_time(void *arg)
{
int t_max;
printf("Inserisci il tempo massimo di attesa(espresso in secondi): ");
scanf("%d", &t_max);
sleep(t_max);
timeout = 1;
return NULL;
}
int main(void)
{
float pi_greco = 0;
float pi_grecotot = 0;
float error;
int i = 0;
int denominatore = 1;
float accuracy;
printf("Inserisci il grado di accuratezza : ");
scanf("%f", &accuracy);
pthread_t thread_time;
pthread_create(&thread_time, NULL, thread_check_time, NULL);
do {
if (i%2 == 0) {
pi_greco = (float)4 / (float) denominatore;
denominatore = denominatore + 2;
}
else{
pi_greco = -(float)4 / (float)denominatore;
denominatore = denominatore + 2;
}
pi_grecotot = pi_grecotot + pi_greco;
i++;
error = pi_grecotot - M_PI;
} while ((fabs(error) > accuracy) || (timeout==1) );
pthread_join(thread_time,NULL);
printf("Il valore di pigreco approssimato a %f è %f\n", accuracy, pi_grecotot);
}
- Ho provato a dare un valore di accuracy basso e un tempo alto e il programma dopo i secondi di sleep che imposto esce dal ciclo
- Ho provato a dare un valore di accuracy alto e un tempo alto ma il programma esce dal ciclo solo quando sono passati i secondi (dando un'approssimazione alta tipo 0.85 il sfw dovrebbe funzionare solo per pochi secondi tempo di eseguire 1 / 2 cicli invece continua a ciclare per tutta la durata dei secondi che ho impostato all'inizio.
Mi potete dire dove sbaglio?


