QWinEventNotifier на Stdin стреляет постоянно - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь создать приложение Qt, способное обрабатывать сообщения от Stdin, не блокируя цикл событий.QSocketNotifier на Stdin не работает в Windows, как я в конце концов понял, поэтому единственная опция, которую я вижу, это QWinEventNotifier, инициализированный как QWinEventNotifier(GetStdHandle(STD_INPUT_HANDLE),this).

К сожалению, этот уведомитель постоянно выдает свой активированный сигнал, независимо от того,Данные stdin присутствуют или нет.Непрерывное излучение сигнала имеет катастрофические последствия для использования процессора и цикла обработки событий.Что я могу с этим сделать?

Кроме того, внутри слота, подключенного к активированному сигналу уведомителя, я не смог найти способ проверить доступные данные перед вызовом операции чтения.Технически это было бы излишним, если бы сигнал достоверно означал, что данные были доступны, но мне все равно любопытно.Вызов любого вида операции чтения - с помощью методов QTextStream или Std - приводит к зависанию программы на неопределенное время до тех пор, пока не будут записаны данные для чтения.Я пытался проверить такие вещи, как QTextStream.atEnd(), Std::cin.eof(), Std::cin.rdbuf()->in_avail(), но, похоже, ни один из них не соответствует имеющимся данным.

...