Forums

Skip to content

Advanced search
  • Quick links
    • Unanswered topics
    • Active topics
    • Search
  • FAQ
  • Login
  • Register
  • Board index International Gentoo Users Forum italiano (Italian) Forum di discussione italiano
  • Search

[C] - Problema con Threads

Tutte le discussioni direttamente correlabili all'informatica e/o a GNU/*nix.

Moderator: ago

Post Reply
  • Print view
Advanced search
3 posts • Page 1 of 1
Author
Message
Miki2805
n00b
n00b
Posts: 1
Joined: Sun Jan 20, 2013 11:12 am

[C] - Problema con Threads

  • Quote

Post by Miki2805 » Sun Jan 20, 2013 11:14 am

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: 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);
}
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?
Top
devilheart
l33t
l33t
User avatar
Posts: 848
Joined: Thu Mar 17, 2005 4:08 pm
Location: Villach, Austria

  • Quote

Post by devilheart » Thu Jan 24, 2013 5:13 pm

Che comportamento vuoi ottenere?
Top
pierino_89
Guru
Guru
User avatar
Posts: 524
Joined: Sat Oct 03, 2009 11:36 am

  • Quote

Post by pierino_89 » Wed Jan 30, 2013 6:02 pm

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
Top
Post Reply
  • Print view

3 posts • Page 1 of 1

Return to “Forum di discussione italiano”

Jump to
  • Assistance
  • ↳   News & Announcements
  • ↳   Frequently Asked Questions
  • ↳   Installing Gentoo
  • ↳   Multimedia
  • ↳   Desktop Environments
  • ↳   Networking & Security
  • ↳   Kernel & Hardware
  • ↳   Portage & Programming
  • ↳   Gamers & Players
  • ↳   Other Things Gentoo
  • ↳   Unsupported Software
  • Discussion & Documentation
  • ↳   Documentation, Tips & Tricks
  • ↳   Gentoo Chat
  • ↳   Gentoo Forums Feedback
  • ↳   Duplicate Threads
  • International Gentoo Users
  • ↳   中文 (Chinese)
  • ↳   Dutch
  • ↳   Finnish
  • ↳   French
  • ↳   Deutsches Forum (German)
  • ↳   Diskussionsforum
  • ↳   Deutsche Dokumentation
  • ↳   Greek
  • ↳   Forum italiano (Italian)
  • ↳   Forum di discussione italiano
  • ↳   Risorse italiane (documentazione e tools)
  • ↳   Polskie forum (Polish)
  • ↳   Instalacja i sprzęt
  • ↳   Polish OTW
  • ↳   Portuguese
  • ↳   Documentação, Ferramentas e Dicas
  • ↳   Russian
  • ↳   Scandinavian
  • ↳   Spanish
  • ↳   Other Languages
  • Architectures & Platforms
  • ↳   Gentoo on ARM
  • ↳   Gentoo on PPC
  • ↳   Gentoo on Sparc
  • ↳   Gentoo on Alternative Architectures
  • ↳   Gentoo on AMD64
  • ↳   Gentoo for Mac OS X (Portage for Mac OS X)
  • Board index
  • All times are UTC
  • Delete cookies

© 2001–2026 Gentoo Foundation, Inc.

Powered by phpBB® Forum Software © phpBB Limited

Privacy Policy

 

 

magic