linux多线程的问题

我用多线程来循环播放MP3歌曲,(MP3歌曲保存在,pt_SongInfo队列里面)staticvoidPlay(pt_SongInfoHead){pid_tpid;pt... 我用多线程来循环播放MP3歌曲,(MP3歌曲保存在,pt_SongInfo 队列里面)

static void Play( pt_SongInfo Head )
{
pid_t pid;

pt_SongInfo temp = Head;
if (!Head)
{
printf("The Head list is empty \n");
exit(0);
}

temp = temp->prior;
while (1)
{
temp = temp->next;

pid = fork();
printf("####play function %d##### \n",getpid());
if (pid == 0)
{
pt_shareInfo shm_info = (pt_shareInfo)shmat(shmid, 0, 0);
if (shm_info == NULL)
{
printf("share memory get address error \n");
exit(0);
}
strcpy(shm_info->name,temp->name);
shm_info->grandson = getpid();
execlp("madplay","madplay","-a -50",temp->name,NULL);
printf("\n@@@@@@@@@@@@@@@@@@@@ NEXT SONG START @@@@@@@@@@@@@@@@@@@@\n");
}
else
{
wait(NULL);
}
}
}

这个代码 我通过
printf("####play function %d##### \n",getpid());
打印测试结果:
第一次播放
####play function 1315#####
####play function 1314#####

第2收
####play function 1316#####
####play function 1314#####

第3首
####play function 1317#####
####play function 1314#####

我的疑问是:
1、为什么一个print ,会出现 两行打印信息?
2、无论循环多少次 ####play function 1314##### 一定是存在的。(只要不关闭)

刚刚学 linux 应用编程,不是特别明白,再次请教
谢谢
展开
 我来答
超柏藋a2
2014-04-04 · TA获得超过184个赞
知道小有建树答主
回答量:161
采纳率:0%
帮助的人:104万
展开全部
fork后产生了两个进程,新进程会保存fork之前的环境,所以新的进程会和父进程一样运行,他们之间不同的是pid,所以可以通过判断pid来决定代码运行在哪个进程中,如果没有判断就会在两个进程中都运行,所以你上诉printf就会打印两次,而在if (pid == 0)条件里的printf只会打印一次
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式