#include
#include
#include
//使用select实现精确到1微秒(0.000001秒)的sleep
void sleep_us(unsigned int nusecs)
{
struct timevaltval;
tval.tv_sec = nusecs / 1000000;
tval.tv_usec = nusecs % 1000000;
select(0, NULL, NULL, NULL, &tval);
}
int main()
{
printf("start\n");
system("date");
sleep_us(30000);//单位微妙
printf("end\n");
system("date");
return 0;
}
#include
#include
#include
#include
static void
sig_alrm(int signo)
{
/* nothing to do, just return to wake up the pause */
}
//使用 alarm 实现精确到秒的sleep,单位秒
unsigned int sleep1(unsigned int seconds)
{
if (signal(SIGALRM, sig_alrm) == SIG_ERR)
return(seconds);
alarm(seconds);/* start the timer */
pause();/* next caught signal wakes us up */
return(alarm(0));/* turn off timer, return unslept time */
}
int main()
{
printf("start sleep1\n");
system("date");
sleep1(3);
printf("end\n");
system("date");
return 0;
}#include
#include
#include
#include
#include
static jmp_bufenv_alrm;
static void
sig_alrm(int signo)
{
longjmp(env_alrm, 1);
}
//使用setjmp 实现精确到秒的sleep,单位秒
unsigned int sleep2(unsigned int seconds)
{
if (signal(SIGALRM, sig_alrm) == SIG_ERR)
return(seconds);
if (setjmp(env_alrm) == 0) {
alarm(seconds);/* start the timer */
pause();/* next caught signal wakes us up */
}
return(alarm(0));/* turn off timer, return unslept time */
}
int main()
{
printf("start sleep2\n");
system("date");
sleep2(3);
printf("end\n");
system("date");
return 0;
}