2013-06-27 7 views
-1

J'aurais besoin d'une minuterie, alors pouvez-vous me dire comment faire une minuterie qui m'interrompre à chaque milliseconde, puis j'aurais une variable dans laquelle je compterais les millisecondes, et ensuite toutes les 20 millisecondes je voudrais appeler la fonction dans le principal?comment créer une minuterie dans Linux en langage C?

+0

Peut-être que vous voulez partager avec nous ce que vous avez essayé allready? – hetepeperfan

+0

Il semble y avoir déjà beaucoup de questions connexes avec des réponses. – jxh

+1

duplication possible de [minuterie de résolution 1ms sous linux recommandée façon] (http://stackoverflow.com/questions/240058/1ms-resolution-timer-under-linux-recommended-way) –

Répondre

0

S'il n'y a rien d'autre à faire puis d'attendre 20ms, puis faire quelque chose, puis à nouveau attendre, l'approche suivante ferait:

#include <sys/time.h> 
#include <sys/types.h> 
#include <unistd.h> 

int main() 
{ 
    while (1) 
    { 
    struct timeval tv = {0, 20000}; /* 0 seconds, 20000 micro secs = 20 milli secs */ 

    if (-1 == select(0, NULL, NULL, NULL, &tv)) 
    { 
     if (EINTR == errno) 
     { 
     continue; /* this means the process received a signal during waiting, just start over waiting. However this could lead to wait cycles >20ms and <40ms. */ 
     } 

     perror("select()"); 
     exit(1); 
    } 

    /* do something every 20 ms */ 
    } 

    return 0; 
}