pause()函数的一个问题。。。
来源:百度文库 编辑:神马文学网 时间:2024/04/28 11:36:11
您查询的关键词是:linux sigrtmin sigaction 。如果打开速度慢,可以尝试快速版;如果想保存快照,可以添加到搜藏。
(百度和网页http://tieba.baidu.com/f?kz=502259850的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。)
div,td{font-family: 宋体;}a:link {color:#261cdc;text-decoration: underline}a:visited {color: #261cdc; text-decoration: underline}/*td {font-size: 75%; line-height: 150%}*/td{font-size:12px; line-height:18px;}.p14{font-size:14px;}.gray{color:#0033cc;}.gray12{color:#666666;}.gray14{font-size:14px;}.gray14 a:link{color:#261cdc;}.gray14 a:hover{color:#261cdc;}.gray14 a:visited{color:#800080;}a.n:link{color:#FFFFFF;}a.n:link{color:#FFFFFF;}a.n:hover{color:#FFFFFF;}a.n:visited{color:#FFFFFF;}.t {COLOR: #261cdc;TEXT-DECORATION: none}.v {COLOR: #261cdc;TEXT-DECORATION: none;font-size:12px;}.fB{ font-weight:bold;}.htb{margin-bottom:5px;font-family:arial}.htb td{font-family:arial}.pad10L{padding-left:10px; }.g{color:#666666}.bt{ background-color:#FCE6CD;clear:both ; height:60px; border:0; width:100%; margin:0; padding:0}.i{font-size:16px; font-family:arial}.Tit1{height:21px; font-size:14px; font-family:arial}a.top{font-family:arial}a.top:link {COLOR: #0000cc; text-decoration: underline}a.top:visited {COLOR: #800080; text-decoration: underline}a.top:active {COLOR: #0000cc; text-decoration: underline}.c{color:#7777CC;}a.c{color:#7777CC;}a.c:visited{color:#7777CC;}.ntb{width:100%;background-color:#0000cc;height:20px;line-height:20px;}.pg{font-family:arial;word-spacing:4px;}.pg *{font-family:arial;}.pg font{font-size:12px;}/*以下为页首样式*/body,form{margin:0}.usrbar{margin-top:4px;padding-right:10px;font-size:12px;height:19px;line-height:19px;font-family:Arial;text-align:right}.hdch{margin-top:3px;height:21px;font-size:14px;font-family:arial}div.cpro_post {border:0px;padding:5px 0px 5px 0px ;margin-bottom:12px}div.cpro_post div{overflow:hidden;word-break:break-all}div.cpro_post div a{font-size:12px;color:black;text-decoration:none}div.cpro_post div a:visited{font-size:12px;color:black;text-decoration:none}div.cpro_post div a u{font-size:14px;color:blue;text_decoration:underline}div.cpro_post div a span{font-size:12px;color:green}div.cpro_post div a span.cpro_red{color:#c60a00;font-size:12px;}div.cpro_post div a u span.cpro_red{font-size:14px;}#cproshow{word-break:break-all;width:210px;margin:0;padding:0;}.wr{;word-wrap:break-word;width:87%;}.au div{float:left; line-height:24px; height:24px;}.au .shi{height:16px; padding-top:2px !important; padding-top:6px;}.au .auw{ width:95px;}.au .uau{padding-top:2px;}#yzm input{ime-mode:disabled;}
乐成数字通信学院,真正直通企业岗位的"数字通信软件开发工程师"国..
www.ldci.com.cn
北大青鸟软件工程师培训班
北大青鸟精品校区软件工程师培训班.想进入IT界并不困难-学习编程最..
www.bjaccp.com
华育国际 IT职业教育专家 软..
华育国际网络工程师,软件工程师,动画设计师培训,全国咨询热线:400-..
www.eduask.cn
java软件工程师培训
东方标准Java高级软件工程师培训:精深的核心技术讲解,三大全真企业..
bj.oristand.com
中嵌学院 500名学员高质量就..
嵌入式Linux培训 中嵌学院(中嵌教育)保证100%就业,500名学员就业案..
www.chinaeda.cn
北大青鸟linux培训, 专业成..
北大青鸟linux培训,由专业老师授课,保证课程内容的统一性,特有的沟..
www.edu-bdqn.net
1 关于pause()函数的一个问题。。。
数后就应该从pause函数返回,并接着执行pause的下一条语句,但是在实验中却出现了一个问题,以下是源码和执行结果:
#include
#include
#include
#include
#include
#define sig0 SIGRTMIN
void mythread();
void my_op(int,siginfo_t*,void*);
int main()
{
pthread_t tid;
sigset_t sigset;
struct sigaction act;
int i,ret;
if(pthread_create(&tid,NULL,(void *)mythread,NULL)!=0)
{
printf("pthread_create error\n");
exit(1);
}
sigemptyset(&sigset);
sigemptyset(&act.sa_mask);
act.sa_sigaction=my_op;
act.sa_flags=SA_SIGINFO;
ret=sigaction(sig0,&act,NULL);
if(ret<0)
printf("install signal error\n");
for(i=0;i<5;i++)
{
pause();
printf("pause has awaked!\n");
}
return 0;
}
void mythread()
{
int i;
union sigval mysigval;
for(i=0;i<5;i++)
{
sleep(2);
mysigval.sival_int=i;
sigqueue(getpid(),sig0,mysigval);
}
}
void my_op(int signum,siginfo_t *info,void *myact)
{
int val;
printf("my_op begin\n");
val=(*info).si_int;
printf("val=%d\n",val);
//getmsg=OSQPend(MsgQueue,perr);
printf("my_op end\n");
}
执行结果为:
my_op begin
val=0
my_op end
my_op begin
val=1
my_op end
my_op begin
val=2
my_op end
my_op begin
val=3
my_op end
my_op begin
val=4
my_op end
pause has awaked!
从运行结果看,主线程捕捉到一个信号并执行了相应的my_op后并没有从pause函数返回,而是在子线程发送完5个信号后才执行了pause后面的printf语句,这是什么原因呢?
2 回复:关于pause()函数的一个问题。。。
-猜测。哈哈
3 回复:关于pause()函数的一个问题。。。
4 回复:关于pause()函数的一个问题。。。
#include
#include
#include
#include
#include
#define sig0 SIGRTMIN -----修改为SIGALRM
void mythread();
void my_op(int,siginfo_t*,void*);
int main()
{
pthread_t tid;
sigset_t sigset;
struct sigaction act;
int i,ret;
if(pthread_create(&tid,NULL,(void *)mythread,NULL)!=0)
{
printf("pthread_create error\n");
exit(1);
}
sigemptyset(&sigset);
sigemptyset(&act.sa_mask);
act.sa_sigaction=my_op;
act.sa_flags=SA_SIGINFO;
ret=sigaction(sig0,&act,NULL);
if(ret<0)
printf("install signal error\n");
for(i=0;i<5;i++)
{
pause();
printf("pause has awaked!\n");
}
return 0;
}
void mythread()
{
int i;
union sigval mysigval;
for(i=0;i<5;i++)
{
sleep(2);
mysigval.sival_int=i;
// sigqueue(getpid(),sig0,mysigval);--注释掉
alarm(1);
}
}
void my_op(int signum,siginfo_t *info,void *myact)
{
int val;
printf("my_op begin\n");
val=(*info).si_int;
printf("val=%d\n",val);
//getmsg=OSQPend(MsgQueue,perr);
printf("my_op end\n");
}
执行结果为:
my_op begin
val=13140866
my_op end
pause has awaked!
my_op begin
val=13140866
my_op end
pause has awaked!
my_op begin
val=13140866
my_op end
pause has awaked!
my_op begin
val=13140866
my_op end
pause has awaked!
my_op begin
val=13140866
my_op end
pause has awaked!
5 回复4:关于pause()函数的一个问题。。。
6 回复:关于pause()函数的一个问题。。。
7 回复:关于pause()函数的一个问题。。。
1、这个可以完美的实现你的要求
//
#include"/usr/workarea/cprogram/include/clsscr.h"
void sig_act();
int main(int argc,char **argv)
{
int i,j,k;
pid_t pid;
signal(SIGCHLD,SIG_IGN);
signal(SIGUSR1,sig_act);
for(i=0;i<5;i++)
{
pid=fork();
if(pid<0)
return 0;
if(pid==0)
{
sleep(2);
kill(getppid(),SIGUSR1);
sleep(1);
exit(0);
}
if(pid>0)
{
pause();
printf("sdlf\n");
}
}
return 0;
}
void sig_act()
{
printf("sig_act\n");
}
2、这个就出现你的那段代码呈现的问题:
//
#include"/usr/workarea/cprogram/include/clsscr.h"
void sig_act();
int main(int argc,char **argv)
{
int i,j,k;
pid_t pid;
signal(SIGCHLD,SIG_IGN);
signal(SIGUSR1,sig_act);
for(i=0;i<5;i++)
{
pid=fork();
if(pid<0)
return 0;
if(pid==0)
{
sleep(2);
kill(getppid(),SIGUSR1);
sleep(1);
exit(0);
}
if(pid>0)
{
continue;
}
}
for(i=0;i<5;i++)
{
pause();
printf("sdfl\n");
}
return 0;
}
void sig_act()
{
printf("sig_act\n");
}
共有贴子数7篇
#ft{clear:both;line-height:20px;background:#E6E6E6;text-align:center}#ft,#ft *{color:#77C;font-size:12px;font-family:Arial;white-space:nowrap}©2008 Baidu 贴吧协议
pause()函数的一个问题。。。
一个关于框架页面frame之间JS函数调用的问题
一个关于框架页面frame之间JS函数调用的问题
Excel LOOKUP函数解决IF函数嵌套层数的问题
即把一个函数本身当作另一个函数的自变量
即把一个函数本身当作另一个函数的自变量
Matlab函数dlmwrite:将一个矩阵写入文件的函数
载荷为位置函数的一个例子
载荷为位置函数的一个例子
Excel LOOKUP函数解决IF函数嵌套层数的问题 - Excel教程,办公软件 - ...
Excel LOOKUP函数解决IF函数嵌套层数的问题 - Excel教程,办公软件
关于双光驱的刻录出现函数不正确的问题
关于双光驱的刻录出现函数不正确的问题
Excel公式输入其实可以归结为函数输入的问题
一个月想通的问题
一个月想通的问题
一个月想通的问题
一个月想通的问题
散分,虚函数的一个典型例子
一个非常不错的Email地址校验函数
一个非常不错的Email地址校验函数
一个类成员函数指针的应用例子
一个女生用C语言写的爱情函数
一个女生用C语言写的爱情函数