Advertisement
BiRabittoh

Timer con threads

Jan 11th, 2018
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.55 KB | None | 0 0
  1. //ESERCIZIO TIMER MARCO ANDRONACO
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <unistd.h>
  6. #include <pthread.h>
  7. #include <sys/types.h>
  8.  
  9. //pthread_mutex_t mutex;
  10. int attivo = 0;
  11.  
  12. void * gestore_thread(void * argomento);
  13.  
  14. int main(void){
  15.     pthread_t thread;
  16.     int run = 1, scelta, S, res;
  17.     printf("Benvenuto nel mio programma timer con thread.\n");
  18.    
  19.     do {
  20.        
  21.         printf("\n1. Start\n");
  22.         printf("2. Stop\n");
  23.         printf("0. Quit\n");
  24.         printf("\nCosa vuoi fare? ");
  25.         scanf("%d", &scelta);
  26.        
  27.         switch(scelta){
  28.             case 1: //start
  29.                 if (!attivo) {
  30.                     printf("Ok, di quanti secondi devo impostare il timer? ");
  31.                     scanf("%d", &S);
  32.                     res = pthread_create(&thread, NULL, gestore_thread, (void *)S);
  33.                     if(res){
  34.                         puts("Errore nella pthread_create!!");
  35.                         exit(EXIT_FAILURE);
  36.                     }
  37.                     attivo = 1;
  38.                 } else
  39.                     printf("C'e' gia' un timer attivo.\n");
  40.             break;
  41.             case 2: //stop
  42.                 if (attivo) {
  43.                     //cancella il thread
  44.                     res = pthread_cancel(thread);
  45.                     if(res){
  46.                         puts("Errore nella pthread_cancel!!");
  47.                         exit(EXIT_FAILURE);
  48.                     }
  49.                     pthread_join(thread, NULL);
  50.                     attivo = 0;
  51.                     printf("Timer interrotto.\n");
  52.                 } else
  53.                     printf("Magari prima imposta un timer.\n");
  54.             break;
  55.             case 0: //quit
  56.                 if (attivo) {
  57.                     //cancella il thread
  58.                     res = pthread_cancel(thread);
  59.                     if(res){
  60.                         puts("Errore nella pthread_cancel!!");
  61.                         exit(EXIT_FAILURE);
  62.                     }
  63.                     pthread_join(thread, NULL);
  64.                 }
  65.                 run = 0;
  66.             break;
  67.             default:
  68.             puts("You had one fucking job. Inserisci 1, 2 o 0, non e' tanto difficile.");
  69.         }
  70.     } while (run);
  71.    
  72.     puts("Arrivederci!");
  73.     exit(EXIT_SUCCESS);
  74. }
  75.  
  76. void * gestore_thread(void * argomento){
  77.     printf("\nSono il secondo thread. Ho impostato il timer a %d secondi.", (int)argomento);
  78.     fflush(stdout);
  79.     sleep((int)argomento);
  80.     attivo = 0;
  81.     puts("\aTimer scaduto!!!");
  82.     pthread_exit(NULL);
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement