2013-09-17 5 views
0

(Работа на win32/C++ среда)High CPU потоков чтения синхронно с еще не заполненными ресурсов

У меня есть функция, которая вызывает ReadFile (синхронно) с фиксированным размером один байт для чтения из SOCKET ресурс (WINSOCK). Существует несколько потоков, выполняющих эту функцию. Данные записываются в сокеты снаружи и не находятся под моим контролем. , когда данные еще не записаны, я нахожу, что мой exe потребляет почти 80% CPU, а использование делится относительно одинаково среди упомянутых потоков (их обычно 4).

как ReadFile - это ОС api, я бы ожидал, что он будет реализован асинхронно внутренне, чтобы избежать таких проблем. Мой вопрос, почему это происходит, и что я могу сделать, чтобы избежать этого.

+0

Почему вы используете 'ReadFile()', а не 'recv()' или 'WSARecv()'? –

ответ

0

Прошло очень много времени с тех пор, как я разработал Win32-программирование, но, похоже, помню, что ReadFile возвращает ошибку, когда нет данных для чтения из сокета. Возможно, он вернет 0 байт, или что-то еще.

+0

№. он блокируется без тайм-аута, что хорошо для моего использования, кроме проблемы с потреблением ресурсов ЦП. –

Смежные вопросы