select()
и poll()
являются системными вызовами - это означает, что ваша программа вызывает ядро ОС, чтобы сделать что-то, и ваша программа ничего не может сделать, ожидая возврата из ядра, если вы не используете другой поток.
Хотя select()
и poll()
используются для асинхронного ввода-вывода, эти функции (системные вызовы) не являются асинхронными - они будут блокироваться (если вы не укажете тайм-аут), пока не произойдет что-то с дескриптором, который вы смотрите.
Лучшей стратегией было бы время от времени проверять дескрипторы (указав небольшое значение тайм-аута), и, если ничего не происходит, делать то, что вы хотите делать во время простоя, в противном случае обрабатывать ввод / вывод.