gpt4 book ai didi

linux - 系统 V IPC msgrcv 与计时器 Howto

转载 作者:太空宇宙 更新时间:2023-11-04 09:56:02 25 4
gpt4 key购买 nike

我们正在使用 System V 消息队列,在阻塞模式下调用 msgrcv 函数。我们想在阻塞的 msgrcv 函数上实现一个计时器,这样当计时器到期并且我们没有收到消息时,我们可以解除阻塞 msgrcv 并继续执行。

对于我们如何通过编程实现这一点,您有什么建议吗?

最佳答案

我已经用报警信号解决了这个问题。

如果有帮助,请检查以下程序:

int msg_recv(int id, MSG_DATA *msgptr)
{

int n;


**alarm(2);** //After 2 second msg_recv interrupt and return errno "Interrupted system call"

n = msgrcv(id, (MSG_DATA *) msgptr, sizeof(MSG_DATA) , 0, 0);

perror("Return from msgrcv");

printf ("N = %d\n %d %s\n\n",n,errno,strerror(errno));

if ( n < 0) //goto LOOP; // This forces the interrupted msgrcv to repeat
return(n);
}




void sigalrm_handler()
{
printf("Alarm signal delivered !\n");

return;
}




int main();


int main()
{
//signal (SIGALRM, times_up); /* go to the times_up function */
/* when the alarm goes off. */
**signal(SIGALRM, sigalrm_handler);**

int msqid; /* return value from msgget() */

MSG_DATA msg_data;

msqid = 0;



printf("Ready to receive ... \n");

**msg_recv(msqid, &msg_data);**

printf("read message \n");


return 0;
}

关于linux - 系统 V IPC msgrcv 与计时器 Howto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4436814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com