[英]Program with loop will not terminate with CTRL + C
我有一个程序,我想运行,直到用户按下CTRL + C中断。当我按下它没有任何反应,我只能通过暂停它并在此之后手动终止它来终止程序。
这是需要无限运行的代码的一部分:
while(true) {
liveOrDie(field);
printOut(field);
}
第一个函数计算是将1还是0放在二维数组中,第二个函数使用for循环将其打印出来,如下所示:
void printOut(int field[38][102]) {
for(int i = 0; i < 38; i++) {
for(int j = 0; j < 102; j++) {
if(field[i][j] == 1) {
cout << "o";
}
else {
cout << " ";
}
}
cout << endl;
}
system("sleep .1");
}
使用睡眠,因此有足够的时间在屏幕上清除所有内容。
因此,程序不会通过Ctrl+C
终止。 什么可能导致这种行为,以及如何使程序在Ctrl+C
后终止?
我怀疑用户代码运行了一段时间,比如1毫秒,睡眠过程导致父进程阻塞100毫秒,所以除非你对CTRL + C密钥非常持久,否则中断最多可能会被忽略。
您应该用适当的库调用替换您对system("sleep .1")
的调用system("sleep .1")
,例如更改:
system("sleep .1");
至:
usleep(100000); // NB: requires #include <unistd.h>
见: man usleep 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.