linux中断服务程序中可以调用sleep()吗

linux中断服务程序中可以调用sleep()吗,第1张

中断服务程序不能执休眠,这是一般的建议,其实有些驱动程序中,也执行一些短暂的延时,比如使用usleep这样的函数,只要时间短就对系统性能影响是不大的。但是要注意,只有usleep这些函数可以使用,因为这些函数实际上CPU忙等待形成延时,实际上就是一个While循环。

sleep()函数

C++中头文件<windowsh>下的函数

作用:延时,程序暂停若干时间。

时间,就是他的参数,单位是毫秒。

例如:

Sleep (500) ;

就是到这里停半秒,然后继续向下执行。

——————————————————

在Linux C语言中 Sleep的单位是秒

sleep(5); //停5秒

——————————————————

进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait 就会收集这个子进程的信息, 并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。

#include <unistdh>

#include <signalh>

#include <stdioh>

int pid1, pid2;

main()

{

int fd[2];

char outpipe[100],inpipe[100];

pipe(fd);

while((pid1=fork())==-1);

if(pid1==0) //子进程1

{

lockf(fd[1],1,0);

sprintf(outpipe,"child 1 process is sending a message!");

write(fd[1],outpipe,50); //子进程1写数据到管道

sleep(5);

lockf(fd[1],0,0);

exit(0);

}

else //父进程

{

while((pid2=fork())==-1); //创建子进程2

if(pid2==0) //子进程2执行

{

lockf(fd[1],1,0); /mutex/

sprintf(outpipe,"child 2 process is sending a message!");

write(fd[1],outpipe,50); //子进程2向管道写数据

sleep(5);

lockf(fd[1],0,0);

exit(0);

}

else //父进程

{

wait(0); //等待子进程结束,那就是子进程1先结束了,进程1先创建的写入数据后,延时5s就/结束了

read(fd[0],inpipe,50);//读管道数据

printf("%s\n",inpipe);//输出的是child 1 process is sending a message!

wait(0); ////////////////////////////再次等待进程结束,这里等的就是进程2

read(fd[0],inpipe,50);//读管道数据

printf("%s\n",inpipe);//这里输出 child 2 process is sending a message!

exit(0);

}

}

}

fork()函数的作用是创建一个进程。在应用程序调用fork()函数后,会创建一个新的进程,称做子进程,原来的进程称做父进程。从这以后,运行的已经是两个进程了,子进程和父进程都可以得到fork()的返回值。对于子进程来说,fork()函数的返回值是0,对于父进程来说,fork函数的返回的是子进程的进程号。如果创建进程失败,fork()函数会给父进程返回-1,这也是判断进程是否创建成功的依据

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/13494460.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存