Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Pthread
Forum - C/C++ - Pthread - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 18:46
Domenica, 20/01/2013
Inoltre dopo diverse prove mi sono accorto che Sleep() fa attendere un tempo praticamente casuale.

PM Quote
Avatar
88Leo88 (Normal User)
Newbie


Messaggi: 13
Iscritto: 15/01/2013

Segnala al moderatore
Postato alle 18:46
Domenica, 20/01/2013
Testo quotato

Postato originariamente da TheDarkJuster:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pthread.h>
  4. #include <math.h>
  5. #include <windows.h>
  6.  
  7. bool timeout = false;
  8. int t_max = 0;
  9.  
  10. bool timeout = false;
  11. int t_max = 0;
  12.  
  13. void *thread_check_time(void *arg)
  14. {
  15.     timeout = false;
  16.     printf("Inserisci il tempo massimo di attesa(espresso in secondi): ");
  17.     scanf("%d", &t_max);
  18.     Sleep(t_max);
  19.     timeout = true;
  20. }
  21.  
  22. int main(void)
  23. {
  24.     float pi_greco = 0, pi_grecotot = 0, num_disp = 1.0f, error = 5, accuracy = 0;
  25.     int i = 0, denominatore = 1;
  26.     printf("Inserisci il grado di accuratezza : ");
  27.     scanf("%f", &accuracy);
  28.     pthread_t thread_time;
  29.     pthread_create(&thread_time, NULL, thread_check_time, NULL);
  30.     while ((error > accuracy) || (!timeout))
  31.         {
  32.                 pi_greco = 1.0f / num_disp;
  33.                 if (((i % 2) == 0) || (i == 0))
  34.                         pi_grecotot = pi_grecotot + pi_greco;
  35.                 else
  36.                         pi_grecotot = pi_grecotot - pi_greco;
  37.                 num_disp = num_disp + 2.0f;
  38.         i++;
  39.         error = 4 * pi_grecotot - M_PI;
  40.         }
  41.     pthread_join(thread_time, NULL);
  42.     printf("Il valore di pigreco approssimato a %f è %f\n", accuracy, 4 * pi_grecotot);
  43.     return 0;
  44. }



Secondo me dovrebbe essere così, logicamente mi sembra corretto, eppure c' è qualcosa che non mi torna.



Non dirlo a me!!! Io sto sclerando su sto codice.....non capisco dove sbaglio!!!

PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 19:03
Domenica, 20/01/2013

Ma questo codice l'hai fatto te ?

è probabile che sia un errore di logica


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 19:16
Domenica, 20/01/2013
no Ultimo, ne sono convintissimo perchè se guardi bene io ho riscritto l' algoritmo matematico, 4 volte tra l' altro e l' errore non è lì. Ho provato a fermare il ciclo solo quando il tempo è scaduto e mi sono accorto che il metodo Sleep() va per i fattacci suoi. Inoltre la seconda condizione da sola non basta per terminare l' algoritmo in un tempo di 5 minuti (passati 5 minuti ho fermato il debug). Nemmeno io so più come aiutarlo. ho persino chiesto il tempo nel main e passato alla funzione nel thread il tempo chiesto nel main ma niente da fare.

PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 19:27
Domenica, 20/01/2013

Prova a creare una funzione esterna al Main, quindi un altro thread


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
88Leo88 (Normal User)
Newbie


Messaggi: 13
Iscritto: 15/01/2013

Segnala al moderatore
Postato alle 19:35
Domenica, 20/01/2013
Testo quotato

Postato originariamente da Ultimo:


Prova a creare una funzione esterna al Main, quindi un altro thread  



Premessa:
Ringrazio immediatamente TheDarkJuster, Ultimo ed ovviamente Pierotofy per il supporto che mi state dando
che non è indifferente e non è da tutti!
Sono contento di essere entrato a far parte di questa comunità anche se ovviamente sono un principiante al momento e spero grazie anche ai vostri consigli di crescere e di poter un giorno aiutare altri utenti che si troveranno nelle mie medesime situazioni.

Ultimo comunque se tu vedi sempre sotto la sezione C c'è un'altro post mio con nome Timer e penso che quello è il codice con un altro thread che intendi tu......puoi provare a dargli un occhio?

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 22:08
Lunedì, 21/01/2013
In queste ore ho provato diverse varianti, ho riscritto tutto da capo più di 6 volte ma niente.L' algoritmo matematico di per sè funziona! Il problema sta nel fatto che basta aggiungere uno Sleep() OPPURE usare i thread e tutto perde ogni logica. INOLTRE la funzione dopo il while...... non mi convince per niente. So che non usarla porta a cose strana..... ma è strana, appena avrò altro tempo mi documenterò meglio ma l' errore potrebbe essere proprio lì.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo