
中断服务程序不能执休眠,这是一般的建议,其实有些驱动程序中,也执行一些短暂的延时,比如使用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,这也是判断进程是否创建成功的依据
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)