Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[C] - Problema con Threads
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Forum di discussione italiano
View previous topic :: View next topic  
Author Message
Miki2805
n00b
n00b


Joined: 20 Jan 2013
Posts: 1

PostPosted: Sun Jan 20, 2013 11:14 am    Post subject: [C] - Problema con Threads Reply with quote

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
View user's profile Send private message
devilheart
l33t
l33t


Joined: 17 Mar 2005
Posts: 777
Location: san leonardo del friuli

PostPosted: Thu Jan 24, 2013 5:13 pm    Post subject: Reply with quote

Che comportamento vuoi ottenere?
Back to top
View user's profile Send private message
pierino_89
Guru
Guru


Joined: 03 Oct 2009
Posts: 444

PostPosted: Wed Jan 30, 2013 6:02 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Forum di discussione italiano All times are GMT
Page 1 of 1

 
Jump to:  
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