Моя основная тема выглядит так:
while (!shouldExit) {
int c = getchar();
switch (c) {
case .... :
case .... :
case 'x' : shuoldExit = true; break;
}
}
Затем есть еще один поток, который читает данные из сети, и когда я получаю специальную команду, он устанавливает shouldExit = 1
. Это работает отлично, единственная проблема в том, что getchar()
в соответствии с strace
продолжает блокировать на read(0)
.
Как мой рабочий поток может прервать системный вызов read
в основном потоке?
Я пытался отправлять сигналы самому себе, но это просто убивает приложение (ожидается). Когда я перехватываю сигналы в нулевом обработчике, приложение продолжает работать, но read
продолжает блокироваться.
Одним из вариантов может быть использование select()
, но я не рад этому. Есть альтернативы?
EDIT:
Смотрите также этот вопрос, который похож на мой, но мы ищем разные решения. Его решение не применимо к моей проблеме, так как блокировка read()
находится в главном потоке.
прерывание чтения блокировки в linux