2013-03-11 6 views
2

Comment créer une minuterie? Une minuterie comme celle de Visual Basic; vous définissez un intervalle, si le temporisateur est activé, il attend que l'heure soit écoulée.Création d'une minuterie en C

Je ne veux pas utiliser une bibliothèque existante parce que je veux savoir comment cela fonctionne. Donc j'espère juste que quelqu'un puisse m'expliquer comment fonctionnent les minuteurs et peut-être me donner un exemple de code pour créer le mien - si ce n'est pas trop avancé.

Editer: Je veux en créer un pour un système Linux.

+3

Quel système d'exploitation ciblez-vous? – cnicutar

+2

Connaissez-vous les threads et/ou les processus? Sinon, ce serait difficile à expliquer jusqu'à ce que vous le fassiez. – acarlow

+3

Je ne sais pas comment Visual Basic fait apparaître cela, mais la suspension et le réveil sont des opérations implémentées dans le système d'exploitation. Si vous ne voulez pas utiliser une bibliothèque existante, vous ne faites que de simples appels au système d'exploitation - pas vraiment le cas. – srking

Répondre

4

Vous pouvez le faire

#include <stdio.h> 
#include <unistd.h> 

int main() { 
    printf("wait\n"); 
    sleep(3); 
    printf("time elapsed\n"); 
    return 0; 
} 
+0

Cela semble mériter un downvote. Le PO a spécifiquement demandé de ne pas utiliser les bibliothèques ... – labyrinth

+4

Eh bien, il a accepté la réponse, peut-être qu'il n'était pas trop sûr de ce qu'il demandait. – LtWorf

4

Voici un exemple très basique qui fonctionnera sous Linux. Si vous regardez la page de manuel de signal, vous verrez qu'il est obsolète au profit de sigaction. Important est de ne pas oublier le volatile, sinon la boucle while peut ne pas se terminer en fonction des optimisations. Notez également comment SIGALRM est une ressource hautement partagée qui peut être utilisée par d'autres fonctions de temporisation et il n'y en a qu'une seule.

Le programme imprimera Waiting pendant trois secondes et quittera après avoir imprimé Finally ... une fois.

#include <stdio.h> 
#include <unistd.h> 
#include <signal.h> 

volatile int mark = 0; 

void trigger(int sig) 
{ 
     mark = 1; 
} 

int main(void) 
{ 
     signal(SIGALRM, trigger); 
     alarm(3); 

     while (!mark) 
     { 
       printf("Waiting\n"); 
     } 
     printf("Finally ...\n"); 

     return 0; 
} 
+9

Et utilisez 100% CPU pour la tâche. – LtWorf