c ++ ubuntu检测实时按键事件

Posted

技术标签:

【中文标题】c ++ ubuntu检测实时按键事件【英文标题】:c++ ubuntu detecting real time keypress event 【发布时间】:2014-08-13 12:11:33 【问题描述】:

我正在编写一个程序,它需要实时响应按键(比如打印“hello key press”)(程序运行在一个巨大的循环中,大约需要 2 秒才能完成)。我找到了一个潜在的答案Detecting keydown and keyup events on Linux C++,但答案对我来说不是很清楚(我还研究了通过重复链接的 4 个答案)。有人可以提供一个简单的代码示例,说明如何通过打印一行(或做任何事情)来使 linux 程序响应按键,而不必在每个循环中检查它?

【问题讨论】:

请阅读所有这些答案。它们包含您正在寻找的内容。 (您提供的链接指向更多...阅读它们全部)。 Detecting keydown and keyup events on Linux C++的可能重复 我确实读过它们,只是不太明白它们是如何工作的。 不清楚你想用 2 秒循环做什么。您想在循环中的某一点检测事件吗?在几个预定义的点?循环中的任何地方?你想对这些事件做什么? 2 秒的循环意味着它必须实时做出反应,我不能等待循环到达任何特定的代码段,否则我会这样做。 【参考方案1】:

查看 SDL 输入事件。 Simple DirectMedia Layer (SDL) 提供了一个为游戏等开发的跨平台 API。它确实提供了许多低级键盘、鼠标等功能。可以找到链接here。

【讨论】:

在答案中只提供链接通常是一种不好的做法,因为它可能会过时。 添加了更多细节 - 现在更好了吗?【参考方案2】:

基本上有办法:

如果长循环时间长,但代码短(即:它包含另一个始终保持工作的内部循环),您可以在最内部的循环中放置事件存在检查。

如果您无法重做长循环,您很可能会将应用程序拆分为两个不同的线程:一个执行事件检测和立即操作,另一个将冗长的操作委托给另一个线程。

【讨论】:

以上是关于c ++ ubuntu检测实时按键事件的主要内容,如果未能解决你的问题,请参考以下文章

实时查询按键事件

在 Swift 中检测按键事件

如何检测 LWUIT 表单中的按键事件?

如何检测textarea上箭头键的按键事件?

在jQuery中检测单个按键事件上的多个键

如何使用 QxtGlobalShortcut 库检测 Qt 中的按键释放事件