English 中文(简体)
如何在C中使用南osleep()? 什么是`tim.tv_sec'和`tim.tv_nsec'?
原标题:How to use nanosleep() in C? What are `tim.tv_sec` and `tim.tv_nsec`?
  • 时间:2011-10-07 07:41:22
  •  标签:
  • c
  • posix
  • sleep

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

我如何睡觉执行<代码>500 000微观秒?

#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 
");
      return -1;
   }

   printf("Nano sleep successfull 
");

   return 0;
}
最佳回答

第二半是500 000 000纳米秒,因此,你的代码应为:

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

当时的情况是,你正在睡觉1 0000005人(+500人)。

问题回答

tv_nsec 是纳米秒的睡觉时间。 500 000us = 500 000人,因此,你希望:

nanosleep((const struct timespec[]){{0, 500000000L}}, NULL);

500 000个微生物是5 000 000纳米秒。 你们只等待500英亩=0.5微克。

这为我工作。

#include <stdio.h>
#include <time.h>   /* Needed for struct timespec */


int mssleep(long miliseconds)
{
   struct timespec rem;
   struct timespec req= {
       (int)(miliseconds / 1000),     /* secs (Must be Non-Negative) */ 
       (miliseconds % 1000) * 1000000 /* nano (Must be in range of 0 to 999999999) */ 
   };

   return nanosleep(&req , &rem);
}

int main()
{
   int ret = mssleep(2500);
   printf("sleep result %d
",ret);
   return 0;
}

我通常使用一些标准线和常数使计算容易:

#define NANO_SECOND_MULTIPLIER  1000000  // 1 millisecond = 1,000,000 Nanoseconds
const long INTERVAL_MS = 500 * NANO_SECOND_MULTIPLIER;

因此,我的法典希望这样做:

timespec sleepValue = {0};

sleepValue.tv_nsec = INTERVAL_MS;
nanosleep(&sleepValue, NULL);

更正确的变量:

{
struct timespec delta = {5 /*secs*/, 135 /*nanosecs*/};
while (nanosleep(&delta, &delta));
}

POSIX 7

第一,职能:

其中包括与以下链接:time.h

1. 负责人应申报具体时间结构,至少应包括下列成员:

time_t  tv_sec    Seconds. 
long    tv_nsec   Nanoseconds.

<>strong>man 2 nanosleep

Pseudo- official glibc docs, 贵方应始终检查:

struct timespec {
    time_t tv_sec;        /* seconds */
    long   tv_nsec;       /* nanoseconds */
};




相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签