我使用Java来测试我的代码&我用线程。我将相同的代码转换为c。
#include<pthread.h>
我在c中使用过上面的内容。所以我只是想知道Java和Linux的sleep()之间有什么区别吗?睡眠()的c因为在java中工作正常但在c中它根本没有响应。
答案 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 */ };