2017-05-24 25 views
0

有没有一个功能,只是睡觉。时间量不是问题。 应该使用什么方法来保证计算机性能不受干扰?什么是在c中任意时间“睡眠”的最有效方法?

+2

无论你的操作系统供应。 – ThingyWotsit

+1

此外,由于OS sleep()样式调用的粒度大小为ms,因此时间量通常是个问题。较短的睡眠对于通用操作系统来说是尴尬的,而较长的睡眠时间则比较长。按照天数的顺序,更好地由进程外OS调度器提供,例如,像cron或Windows Scheduler。 – ThingyWotsit

+0

以前有很多问题,[这里是一个](https://stackoverflow.com/questions/14812233/sleeping-for-milliseconds-on-windows-linux-solaris-hpux-ibm-aix-vxworks-wi) –

回答

1

假设您正在使用Linux平台,则有一个标准的C函数可以睡眠几微秒。

#include <unistd.h> 
unsigned int usec; 
... 
usleep(usec); 

当Sleep被调用时,程序从运行状态退出并在睡眠时间结束时重新进入就绪状态,因此不影响CPU时间。其他进程/线程可以在那时利用CPU。 如果usleep上不可使用Unix的变种,或者,你可以使用sleep是粒度在几秒钟内,

unsigned int sleep(unsigned int seconds); 
+0

'usleep'不是“标准C函数”。 –

+1

'usleep()'是一个过时的POSIX函数;仍然在POSIX中有['sleep'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html)和['nanosleep'](http://pubs.opengroup.org/onlinepubs /9699919799/functions/nanosleep.html)。 'threads.h'也有['thrd_sleep'](http://port70.net/~nsz/c/c11/n1570.html#7.26.5.7);标准在C11中,但仍不支持glibc。 –

2

Unix变种通常提供sleep(seconds)usleep(microseconds)usleep()已弃用POSIX nanosleep()。 Windows提供Sleep(sometime_in_millisecs);

的Windows:

#include <windows.h> 
#include <stdio.h> 

int main() { 
    printf("starting to sleep...\n"); 
    Sleep(3000); // sleep three seconds 
    printf("sleep ended\n"); 
} 

的Linux(UNIX):

#include <unistd.h> 

//unsigned int sleep(unsigned int seconds); 

int main() { 
    sleep(3); // sleep 3 seconds 
    usleep(3000000); // sleep 3 seconds more 
    return(0); 
} 
+1

请注意'usleep'已过时 –

+0

@ErikW感谢您的信息! – Chimera

相关问题