java& sleep()之间的差异是什么?睡觉()的c?

时间:2015-07-22 07:39:00

标签: java c ubuntu

我使用Java来测试我的代码&我用线程。我将相同的代码转换为c。

#include<pthread.h>

我在c中使用过上面的内容。所以我只是想知道Java和Linux的sleep()之间有什么区别吗?睡眠()的c因为在java中工作正常但在c中它根本没有响应。

3 个答案:

答案 0 :(得分:3)

C函数定义为sleep(unsigned int seconds);

Java函数为Thread.sleep(long millis).

虽然功能相似,但参数的含义不同。 Java中的Thread.sleep(1000)将停止你的线程一秒钟,而C中的sleep(1000)将冻结它,看起来像是永远。

在C语言中,有一些具有更高精度的函数:在Windows上,你可以从windows.h中获得睡眠,而在Linux中你可以分别使用微睡和纳秒级的微秒和纳秒参数。

答案 1 :(得分:0)

您应该使用

#include<unistd.h>

在Windows上,您可以使用:

#include<windows.h>

答案 2 :(得分:0)

Sleep是一个Windows函数。在Unix / Linux上使用usleep。请注意,usleep需要微秒,而不是毫秒。

<强>&GT;更新

旧的POSIX标准已定义usleep(),因此可在Linux上使用:

   int usleep(useconds_t usec);
     

说明

     

usleep()函数暂停执行调用进程          (至少)usec微秒。睡眠可能会稍微延长          任何系统活动或通过处理呼叫所花费的时间或通过          系统定时器的粒度。

usleep()需要微秒,因此您必须将输入乘以1000才能以毫秒为单位进行休眠。

usleep()已被弃用,随后从POSIX中移除;对于新代码,首选nanosleep()

   #include <time.h>

   int nanosleep(const struct timespec *req, struct timespec *rem);
     

说明

     

nanosleep()暂停执行调用线程,直到至少*req中指定的时间已经过去,或者   传递一个触发调用处理程序的信号   调用线程或终止进程。

     

结构timespec用于指定具有纳秒精度的时间间隔。它的定义如下:

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