运行后台超时功能
Running a timeout function in the background
我有一个功能:
int waiting()
{
fd_set input_set;
struct timeval timeout;
int ready_for_reading = 0;
int read_bytes = 0;
FD_ZERO(&input_set );
FD_SET(0, &input_set);
timeout.tv_sec = WAIT; // WAIT seconds
timeout.tv_usec = 0; // 0 milliseconds
printf("^[[10;53H^[[1;34;44m LOGIN TO BBS ^[[0;37m", WAIT);
printf("^[[11;53H^[[34;46m apply to bbs ^[[0;37m", WAIT);
printf("^[[12;53H^[[34;46m page sysop ^[[0;37m", WAIT);
printf("^[[13;53H^[[34;46m logout of bbs ^[[0;37m", WAIT);
printf("\n", WAIT);
ready_for_reading = select(1, &input_set, NULL, NULL, &timeout);
if (ready_for_reading == -1) {
return -1;
}
if (ready_for_reading) {
} else {
exit(1);
}
return 0;
}
它超时了,就像它应该的那样,问题是它仅在用户未输入任何内容时才有效。无论用户是否输入任何内容,我都希望它能正常工作。具体来说,如果用户使用箭头 select 选择之一,但没有按回车键实际上 select 它。这一点的全部意义在于,如果有人调用我的 BBS,如果他们通过 telnet 访问它,并且在菜单中,如果他们什么都不做,它就会超时。我遇到的一个问题是,有些人呼叫我的 BBS 并登录,但实际上什么也没做。而且它不会像它应该的那样退出。在BBS上锁定一个节点。另外,我想在后台 运行 这个功能。这可能吗?
好的。我找到了一个功能,它完全符合我的要求。 alarm()
。
我在放置 waiting
函数的地方设置 alarm(15)
,然后在我希望它不会超时的地方添加一个 alarm(0)
。
我有一个功能:
int waiting()
{
fd_set input_set;
struct timeval timeout;
int ready_for_reading = 0;
int read_bytes = 0;
FD_ZERO(&input_set );
FD_SET(0, &input_set);
timeout.tv_sec = WAIT; // WAIT seconds
timeout.tv_usec = 0; // 0 milliseconds
printf("^[[10;53H^[[1;34;44m LOGIN TO BBS ^[[0;37m", WAIT);
printf("^[[11;53H^[[34;46m apply to bbs ^[[0;37m", WAIT);
printf("^[[12;53H^[[34;46m page sysop ^[[0;37m", WAIT);
printf("^[[13;53H^[[34;46m logout of bbs ^[[0;37m", WAIT);
printf("\n", WAIT);
ready_for_reading = select(1, &input_set, NULL, NULL, &timeout);
if (ready_for_reading == -1) {
return -1;
}
if (ready_for_reading) {
} else {
exit(1);
}
return 0;
}
它超时了,就像它应该的那样,问题是它仅在用户未输入任何内容时才有效。无论用户是否输入任何内容,我都希望它能正常工作。具体来说,如果用户使用箭头 select 选择之一,但没有按回车键实际上 select 它。这一点的全部意义在于,如果有人调用我的 BBS,如果他们通过 telnet 访问它,并且在菜单中,如果他们什么都不做,它就会超时。我遇到的一个问题是,有些人呼叫我的 BBS 并登录,但实际上什么也没做。而且它不会像它应该的那样退出。在BBS上锁定一个节点。另外,我想在后台 运行 这个功能。这可能吗?
好的。我找到了一个功能,它完全符合我的要求。 alarm()
。
我在放置 waiting
函数的地方设置 alarm(15)
,然后在我希望它不会超时的地方添加一个 alarm(0)
。