У меня есть функция:
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;
}
Время ожидания, как и должно быть, проблема в том, что он работает только тогда, когда пользователь ничего не вводит.Я хотел бы, чтобы это работало независимо от того, вводит ли пользователь что-нибудь.В частности, если пользователь использует стрелки для выбора одного из вариантов, но не нажимает клавишу ввода, чтобы фактически выбрать его.Весь смысл в том, что люди, которые звонят на мою BBS, если они с ней связываются, и находятся в меню, для них истекает время ожидания, если они ничего не делают.У меня проблема в том, что некоторые люди вызывают мою BBS и входят в систему, но на самом деле ничего не делают.И он не выходит так, как должен.Блокировка узла на BBS.Кроме того, я хотел бы запустить эту функцию в фоновом режиме.Это возможно?