网站建立连接不安全怎么处理,wordpress连接mysql8,网站开发总跳转至404页面,网站推广优化外包公司目录
1 为什么需要休眠
2 sleep、usleep和nanosleep函数
2.1 sleep函数
2.2 usleep函数
2.3 nanosleep函数
3 示例程序 1 为什么需要休眠
有时需要将进程暂停或休眠一段时间#xff0c; 进入休眠状态之后#xff0c;程序将暂停运行#xff0c;直到休眠结束。 以下是一…目录
1 为什么需要休眠
2 sleep、usleep和nanosleep函数
2.1 sleep函数
2.2 usleep函数
2.3 nanosleep函数
3 示例程序 1 为什么需要休眠
有时需要将进程暂停或休眠一段时间 进入休眠状态之后程序将暂停运行直到休眠结束。 以下是一些常见的休眠场景和作用 避免过载在高负载或密集计算任务中程序可能需要定期休眠以避免长时间占用CPU给系统其他部分留出处理时间。 定时任务在需要执行定时任务的场景中休眠可以用于实现简单的时间调度。 错误恢复在遇到错误或异常时程序可能会选择休眠一段时间然后重试操作这可以作为简单的错误恢复机制。 节能在某些嵌入式系统或移动设备上休眠可以用于节能通过减少CPU的活动来降低功耗。
在Linux系统中实现休眠的常用函数包括
sleep()基于秒的休眠。usleep()基于微秒的休眠1微秒 10^-6秒。nanosleep()基于纳秒的休眠1纳秒 10^-9秒提供了更精细的控制。
2 sleep、usleep和nanosleep函数
2.1 sleep函数
sleep函数使调用进程休眠指定的秒数。
#include unistd.hunsigned int sleep(unsigned int seconds);
seconds要休眠的秒数。返回值 如果休眠时长为参数 seconds 所指定的秒数则返回 0若被信号中断则返回剩余的秒数。
2.2 usleep函数
usleep函数使调用进程休眠指定的微秒数。
#include unistd.hint usleep(useconds_t usec)
参数usec - 要休眠的微秒数。返回值 成功返回 0失败返回-1并设置 errno。
2.3 nanosleep函数
nanosleep函数使调用进程休眠指定的纳秒数。
#include time.hint nanosleep(const struct timespec *req, struct timespec *rem);
req - 指向 timespec 结构的指针该结构指定要休眠的时间。rem - 指向 timespec 结构的指针用于存储未完成的剩余时间如果函数被中断。返回值 在成功休眠达到请求的时间间隔后 nanosleep()返回 0 如果中途被信号中断或遇到错误则返回-1 并将剩余时间记录在参数 rem 指向的 struct timespec 结构体变量中参数 rem 不为 NULL 的情况下如果为 NULL 表示不接收剩余时间还会设置 errno 标识错误类型。
3 示例程序
示例程序使用 sleep()、usleep() 和 nanosleep() 函数演示了当这些函数因信号中断时如何处理剩余的休眠时间。
#include stdio.h
#include unistd.h
#include time.h
#include errno.hint main()
{// 使用 sleep() 函数休眠 2 秒printf(使用 sleep() 休眠 2 秒...\n);unsigned int seconds 2;unsigned int remaining_seconds sleep(seconds);if (remaining_seconds 0) {printf(sleep() 正常结束。\n);} else {printf(sleep() 被中断剩余休眠时间%u 秒。\n, remaining_seconds);}// 使用 usleep() 函数休眠 1000 微秒printf(使用 usleep() 休眠 1000 微秒...\n);unsigned long usecs 1000;int result usleep(usecs);if (result 0) {printf(usleep() 正常结束。\n);} else {printf(usleep() 被中断错误码%d。\n, errno);}// 使用 nanosleep() 函数休眠 100 毫秒printf(使用 nanosleep() 休眠 100 毫秒...\n);struct timespec req, rem;req.tv_sec 0;req.tv_nsec 100000000; // 100 毫秒while (nanosleep(req, rem) -1) {if (errno EINTR) {// 如果 nanosleep 被中断更新剩余时间并重试req rem;} else {perror(nanosleep 遇到错误);break;}}printf(nanosleep() 正常结束。\n);return 0;
}
运行结果如下