来自Windows控制台的异步输入通知

0 投票
3 回答
819 浏览
提问于 2025-04-16 14:26

我需要从控制台异步获取用户输入,也就是说,不想让程序在等待输入时停下来。我可以用下面的Python代码来检查是否有输入可用,但这样会导致CPU使用率达到100%。

import msvcrt
while not msvcrt.kbhit():
    pass

有没有其他方法可以做到这一点?比如说,可以在控制台注册一个键盘事件的回调函数吗?

更新:我已经在Python和ctypes中创建了一个可行的解决方案。可以查看这个例子:http://techtonik.rainforce.org/2011/03/asynchronous-input-from-windows-console.html

3 个回答

0

msvcrt.getch()

这个内容提到的是Python编程中的一个功能,叫做`msvcrt.getch()`。简单来说,这个功能可以让你的程序在运行时等待用户按下一个键,然后再继续执行。它通常用于需要用户输入的场景,比如游戏或者命令行程序。

0

没有办法异步地获取控制台的输入和输出。

你可以尝试在代码中加个睡眠时间,这样可以防止CPU使用率突然飙升。

2

在使用Win32 API时,通常会调用WaitForMultipleObjects这个函数,配合其他事件来判断哪个事件先发生。标准输入的句柄会在有输入可用时被认为是触发的。

一个进程可以在某个等待函数中指定一个控制台输入缓冲区的句柄,以确定是否有未读的控制台输入。当输入缓冲区不为空时,控制台输入缓冲区句柄的状态会被标记为已触发。

所以我建议你看看Python是否有相关的封装可以使用。

撰写回答