做最好的自己520 发表于 2023-2-8 21:39:22

如何用C语言封装一个延时函数?

众所周知,C语言有很多库函数可以拿来直接用,就例如:没错就这 {:10_305:} Sleep()
于是我脑洞大开,想自己封装一个来耍耍,结果延时函数没封装出来,人就要先封了{:10_250:}


题目:实现l类似Sleep()功能,封装一个延时函数 Sleep() 单位是秒
.......
.....
...


麻烦知道的鱼友,顺便讲解讲解一下其中的原理,谢谢{:10_291:}

dolly_yos2 发表于 2023-2-8 21:44:49

本帖最后由 dolly_yos2 于 2023-2-8 21:45 编辑

可以看看手册,里面提了一些实现方式
https://man7.org/linux/man-pages/man3/sleep.3.html
https://man7.org/linux/man-pages/man3/sleep.3p.html
(这个好像说的是 sleep 而不是 Sleep,算了不管了)

ba21 发表于 2023-2-8 21:52:04

https://blog.csdn.net/zhoutianzi12/article/details/103438079

做最好的自己520 发表于 2023-2-8 22:07:33

dolly_yos2 发表于 2023-2-8 21:44
可以看看手册,里面提了一些实现方式
https://man7.org/linux/man-pages/man3/sleep.3.html
https://man7 ...

是sleep() 写成大写了不好意思{:10_278:}

jhq999 发表于 2023-2-8 22:10:01

int sleep(long t )
{
    clock_t st=clock();
    while(t>clock()-st);
    return 0;
}

人造人 发表于 2023-2-8 22:10:06

#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void handler(int signo) {}

void sleep_(size_t second) {
    signal(SIGALRM, handler);
    alarm(second);
    sigset_t set;
    sigfillset(&set);
    sigdelset(&set, SIGALRM);
    sigsuspend(&set);
}

int main(void) {
    printf("hello world!\n");
    sleep_(3);
    printf("hello world!\n");
    sleep_(3);
    printf("hello world!\n");
    //while(1);
    return 0;
}

做最好的自己520 发表于 2023-2-8 22:10:49

ba21 发表于 2023-2-8 21:52
https://blog.csdn.net/zhoutianzi12/article/details/103438079

谢谢   但是这个不是理想中的答案

人造人 发表于 2023-2-8 22:11:11

https://cn.bing.com/search?q=linux%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8+sleep&qs=n&form=QBRE&sp=-1&pq=linux%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8+sleep&sc=10-15&sk=&cvid=F9F1B67703DE4918A65D44C1A0ADCFE0&ghsh=0&ghacc=0&ghpl=

https://www.cnblogs.com/charlesblc/p/6492582.html#:~:text=sleep%20%28%29%E5%92%8Cnanosleep%20%28%29%E9%83%BD%E6%98%AF%E4%BD%BF%E8%BF%9B%E7%A8%8B%E7%9D%A1%E7%9C%A0%E4%B8%80%E6%AE%B5%E6%97%B6%E9%97%B4%E5%90%8E%E8%A2%AB%E5%94%A4%E9%86%92%EF%BC%8C%E4%BD%86%E6%98%AF%E4%BA%8C%E8%80%85%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%AE%8C%E5%85%A8%E4%B8%8D%E5%90%8C%E3%80%82.%20Linux%E4%B8%AD%E5%B9%B6%E6%B2%A1%E6%9C%89%E6%8F%90%E4%BE%9B%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8sleep%20%28%29%EF%BC%8Csleep%20%28%29%E6%98%AF%E5%9C%A8%E5%BA%93%E5%87%BD%E6%95%B0%E4%B8%AD%E5%AE%9E%E7%8E%B0%E7%9A%84%EF%BC%8C%E5%AE%83%E6%98%AF%E9%80%9A%E8%BF%87%E8%B0%83%E7%94%A8alarm,%28%29%E6%9D%A5%E8%AE%BE%E5%AE%9A%E6%8A%A5%E8%AD%A6%E6%97%B6%E9%97%B4%EF%BC%8C%E8%B0%83%E7%94%A8sigsuspend%20%28%29%E5%B0%86%E8%BF%9B%E7%A8%8B%E6%8C%82%E8%B5%B7%E5%9C%A8%E4%BF%A1%E5%8F%B7SIGALARM%E4%B8%8A%EF%BC%8Csleep%20%28%29%E5%8F%AA%E8%83%BD%E7%B2%BE%E7%A1%AE%E5%88%B0%E7%A7%92%E7%BA%A7%E4%B8%8A%E3%80%82.%20nanosleep%20%28%29%E5%88%99%E6%98%AFLinux%E4%B8%AD%E7%9A%84%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%EF%BC%8C%E5%AE%83%E6%98%AF%E4%BD%BF%E7%94%A8%E5%AE%9A%E6%97%B6%E5%99%A8%E6%9D%A5%E5%AE%9E%E7%8E%B0%E7%9A%84%EF%BC%8C%E8%AF%A5%E8%B0%83%E7%94%A8%E4%BD%BF%E8%B0%83%E7%94%A8%E8%BF%9B%E7%A8%8B%E7%9D%A1%E7%9C%A0%EF%BC%8C%E5%B9%B6%E5%BE%80%E5%AE%9A%E6%97%B6%E5%99%A8%E9%98%9F%E5%88%97%E4%B8%8A%E5%8A%A0%E5%85%A5%E4%B8%80%E4%B8%AAtimer_list%E5%9E%8B%E5%AE%9A%E6%97%B6%E5%99%A8%EF%BC%8Ctime_list%E7%BB%93%E6%9E%84%E9%87%8C%E5%8C%85%E6%8B%AC%E5%94%A4%E9%86%92%E6%97%B6%E9%97%B4%E4%BB%A5%E5%8F%8A%E5%94%A4%E9%86%92%E5%90%8E%E6%89%A7%E8%A1%8C%E7%9A%84%E5%87%BD%E6%95%B0%EF%BC%8C%E9%80%9A%E8%BF%87nanosleep%20%28%29%E5%8A%A0%E5%85%A5%E7%9A%84%E5%AE%9A%E6%97%B6%E5%99%A8%E7%9A%84%E6%89%A7%E8%A1%8C%E5%87%BD%E6%95%B0%E4%BB%85%E4%BB%85%E5%AE%8C%E6%88%90%E5%94%A4%E9%86%92%E5%BD%93%E5%89%8D%E8%BF%9B%E7%A8%8B%E7%9A%84%E5%8A%9F%E8%83%BD%E3%80%82.%20

做最好的自己520 发表于 2023-2-8 22:21:44

人造人 发表于 2023-2-8 22:10


哇哦谢谢{:10_315:}

kerln888 发表于 2023-2-9 08:29:18

{:10_256:}我也来学习下

kerln888 发表于 2023-2-9 08:29:59

{:10_245:}{:10_245:}{:10_245:}{:10_245:}非洲人啊

做最好的自己520 发表于 2023-2-9 12:02:02

人造人 发表于 2023-2-8 22:10


大佬有 Windows 下实现延时函数封装的吗?

a18468922 发表于 2023-2-9 15:31:43

学习了{:10_254:}{:10_254:}{:10_254:}

dolly_yos2 发表于 2023-2-9 15:47:19

做最好的自己520 发表于 2023-2-9 12:02
大佬有 Windows 下实现延时函数封装的吗?

https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-sleep
Sleep 就是 Windows 提供的 API,暂停当前线程的执行一段时间,在 Windows 上的 sleep 可能可以用 Sleep 直接实现
( sleep 也不是 C 语言里的,而是 POSIX 的)

别吃我饼干 发表于 2023-2-9 15:51:23

学习一下

别吃我饼干 发表于 2023-2-9 15:51:57

学习一下

sfqxx 发表于 2023-2-9 16:34:07

学习

中英文泡椒 发表于 2023-2-9 16:45:18

学习一下{:10_256:}

做最好的自己520 发表于 2023-2-9 18:37:49

dolly_yos2 发表于 2023-2-9 15:47
https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-sleep
Sleep 就是 Windows ...

这样啊   谢谢{:10_257:}

zhangjinxuan 发表于 2023-2-9 21:11:12

所以到底是啥,运用clock不行嘛{:10_256:}
页: [1] 2
查看完整版本: 如何用C语言封装一个延时函数?