【发布时间】:2017-12-09 14:41:57
【问题描述】:
对于家庭作业,我只需要使用linux 系统调用来管理游戏中的信号,在C 中编程。
我必须做的一件事是在thread 中无限调用sigsuspend 并等待SIGALRM,然后如果有信号警报(信号警报)我必须printf() 某事(无所谓)。
但是,我尝试了几件事,但它不起作用,我不知道如何"deblock" sigsuspend 并打印我想要的。并且游戏中有一个发送信号的计时器。我的代码有效,但不适用于sigsuspend
当然,我还有一个sigarlm 处理程序,它在收到sigarlm 时对SDL 执行一些操作。
我真的不知道如何使用带有sigsuspend的面具@
代码:
//initialising sigaction struct
int init (void)
{
// Signal handler
sigact.sa_handler = sigalrm_handler;
sigact.sa_flags = 0;
sigemptyset(&sigact.sa_mask);
// Linked list
head = NULL;
sigaction(SIGALRM, &sigact, NULL);
pthread_create(&tid_sigrecv, NULL, (void *)deamon, NULL);
return 1; // Implementation ready ?
}
sigsuspend 部分
void deamon(void * arg)
{
int sig;
while(1) {
sigset_t mask;
sigemptyset(&mask);
sigaddset(&mask, SIGALRM);
sigsuspend(&mask);
printf("in thread\n");
}
}
目前它只在收到sigarlm 时不打印“in thread”,我应该怎么做才能正确使用sigsuspend? 我必须使用sigsuspend
【问题讨论】: