Search code examples
cposixsleep

How to use nanosleep() in C? What are `tim.tv_sec` and `tim.tv_nsec`?


What is the use of tim.tv_sec and tim.tv_nsec in the following?

How can I sleep execution for 500000 microseconds?

#include <stdio.h>
#include <time.h>

int main()
{
   struct timespec tim, tim2;
   tim.tv_sec = 1;
   tim.tv_nsec = 500;

   if(nanosleep(&tim , &tim2) < 0 )   
   {
      printf("Nano sleep system call failed \n");
      return -1;
   }

   printf("Nano sleep successfull \n");

   return 0;
}

Solution

  • Half a second is 500,000,000 nanoseconds, so your code should read:

    tim.tv_sec  = 0;
    tim.tv_nsec = 500000000L;
    

    As things stand, you code is sleeping for 1.0000005s (1s + 500ns).