

#include <semaphore.h>
#include <pthread.h>
#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <time.h>
#include <sys/time.h>
using namespace std;

#define PROCESS 325000


void do_work(unsigned int duration);
void tache_periodique_1(unsigned int duration);
void tache_periodique_2(unsigned int duration);

void do_work(unsigned int duration)
{
	int i;
	for(i=0; i<duration*PROCESS; i++)
	{
		asm volatile (" NOP"); // Le compilateur effectue un travail
	}	
	printf("Un travail est fini\n");
}

void tache_periodique_1(unsigned int duration)
{

	printf("Un travail sleep commence\n");
	sleep(duration/1000); // cette fonction prend des secondes en paramètres 
	printf("Un travail sleep est fini\n");
	
}

void tache_periodique_2(unsigned int duration)
{
	
	printf("Un travail alarm commence\n");
	alarm(duration/1000); // cette fonction prend des secondes en paramètres 	
	printf("Un travail alarm est fini\n");

}

int main(void)
{

	int choix;
   // clock_t start, end;
   timeval debut;
   timeval fin;

   
	cout << "Quelle fonction ? \n1 - Sleep\n2 - Alarm\n";
	cin >> choix;
	
	if(choix == 1) 
	{
		// start = clock(); // Ne fonctionne pas 
		gettimeofday(&debut, NULL);
		
		tache_periodique_1(5000);
		// end = clock(); // Ne fonctionne pas
		
		gettimeofday(&fin, NULL);
	}
	
	else if(choix == 2) 
	{
		// start = clock();
		gettimeofday(&debut, NULL);
		
		tache_periodique_2(5000);
		// end = clock();
		
		gettimeofday(&fin, NULL);
	}
	
	else 
	{
		cout << "choix non valide";
		return 0;
	}		
	
	cout << "Temps total de " <<  (fin.tv_usec - debut.tv_usec)*1000;
	
	
	return 0;
}