View previous topic :: View next topic |
Author |
Message |
Miki2805 n00b
Joined: 20 Jan 2013 Posts: 1
|
Posted: Sun Jan 20, 2013 11:14 am Post subject: [C] - Problema con Threads |
|
|
Ciao a tutti,
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: |
#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);
}
|
Le prove che ho svolto sono semplicemente queste:
- 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? |
|
Back to top |
|
|
devilheart l33t
Joined: 17 Mar 2005 Posts: 848 Location: Villach, Austria
|
Posted: Thu Jan 24, 2013 5:13 pm Post subject: |
|
|
Che comportamento vuoi ottenere? |
|
Back to top |
|
|
pierino_89 Guru
Joined: 03 Oct 2009 Posts: 522
|
Posted: Wed Jan 30, 2013 6:02 pm Post subject: |
|
|
In realtà il problema è molto banale: il tuo thread esce solo dopo aver atteso t_max secondi, e alla fine del ciclo usi t_join (funzione che aspetta la terminazione di un thread).
Quindi, anche se il ciclo ha finito, il tuo programma attende comunque t_max prima di darti il risultato.
[edit]
ti consiglio comunque di far leggere il timeout al di fuori del thread: se non attendi la conclusione del thread (anche solo commentando la riga con thread_join) e imposti una precisione bassa, il programma ti mostra il risultato ancora prima di averti chiesto il timeout. _________________ Linux registered user 461710 |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|