QWinEventNotifier在Stdin上不断触发

时间:2019-02-25 14:48:43

标签: c++ qt winapi stdin

我正在尝试生成一个Qt应用程序,该应用程序能够处理来自Stdin的消息,而不会阻塞事件循环。我最终意识到,Stdin上的QSocketNotifier在Windows上不起作用,所以我只能看到QWinEventNotifier,它初始化为QWinEventNotifier(GetStdHandle(STD_INPUT_HANDLE),this)

不幸的是,无论是否存在任何标准输入数据,此通知程序都会不断发出其激活信号。连续发出信号会对CPU使用率和事件循环造成灾难性的后果。我该怎么办?

此外,在连接通知程序激活信号的插槽内,在调用读取操作之前,我还无法找到一种方法来检查可用数据。从技术上讲,如果信号可靠地表明有数据可用,这将是多余的,但我很好奇。调用任何类型的读取操作(无论是通过QTextStream还是通过Std方法)都会导致程序无限期挂起,直到写入数据为止。我曾尝试检查诸如QTextStream.atEnd()Std::cin.eof()Std::cin.rdbuf()->in_avail()之类的东西,但这些似乎都与实际可用数据无关。

0 个答案:

没有答案