我一直试图弄清楚这是否可行,就像我做的那样.该程序应该派生一个循环打印到STDOUT的子进程,父进程应退出以返回终端提示符.然后孩子应该等待SIGINT告诉它什么时候关闭.但是我记得读过SIGINT只发送到前台的进程,这解释了为什么我的被遗弃的孩子不受CTRL + C的影响.有没有办法让被遗弃的孩子接收从终端发送的信号,或者终端中的某些系统调用将它带到可以接收SIGINT的前台?或者我的搜索无望?
码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/types.h>
/* signal handler for the child process */
void catchInt (int signum)
{
printf("\nMy sincerest apologies, master\n");
exit(0);
}
/* signal handler for the parent process */
void ignoreInt (int signum)
{
/* prevent any extra output from being printed */
fflush(stdout);
/* wait for child to apologize before replying */
wait(NULL);
printf("You're welcome\n");
exit(0);
}
/* signal handler for the child's alarm */ …Run Code Online (Sandbox Code Playgroud) 我目前有几个可拖放的图层链接到UILabels.我有一个LongPressRecognizer在标签上拾取长按,并在拖动标签的情况下移动图层.
我通过在识别器的目标中捕捉手势来实现这一点,如下所示:
- (void)handleDragging:(UILongPressGestureRecognizer *)gestureRecognizer
{
switch ([gestureRecognizer state])
{
case UIGestureRecognizerStateBegan:
[self startDragging:gestureRecognizer];
break;
case UIGestureRecognizerStateChanged:
[self doDrag:gestureRecognizer];
break;
case UIGestureRecognizerStateEnded:
case UIGestureRecognizerStateCancelled:
case UIGestureRecognizerStateFailed:
[self stopDragging:gestureRecognizer];
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我想让用户在拖动一个标签时能够在另一个标签上执行额外的长按以同时拖动多个标签.由于识别器当前接受1次触摸(numberOfTouchesRequired = 1),因此它似乎无法接收其他事件.但是,每次在iPad上发生另一个触摸事件时,都会触发gestureRecognizerStateChanged事件.但是,识别器上的numberOfTouches仍显示单次触摸.
给每个标签自己的LongPressRecognizer是最好的解决方案,还是我可以用一个识别器做更优雅的事情?