c++ - 使用 c++ 和 x86 和 x64 架构访问处理器中断

标签 c++ c windows linux

我想知道是否可以从 C++ 代码访问处理器中断(我想我需要使用汇编代码)。

事情是这样的。我习惯于使用嵌入式系统(PIC、ARM7 和 Atmel 处理器),我可以毫无问题地编写中断程序(我使用 C)。所有寄存器都已映射,总而言之,这很容易,具体取决于应用程序。现在我正在使用 x86 和 x64 架构,我希望(强调 WANT)能够在这些处理器中执行相同的操作。

例如:我希望在 C++ 中有一个线程运行一段代码,该代码不断验证当前按下的键,而无需按下回车键(cin、getchar 等)。我想编写一个定时器中断,这样我就可以在特定时间执行操作。我知道我想做的很多事情都可以通过操作系统完成,但我真的很想拥有自己做这些的自由。

目前我正在使用 Linux (Ubuntu),但我肯定会很快使用 Windows,如果这是回答该问题所需的信息的话

最佳答案

对于用户级进程,中断被信号取代。您可以通过调用 setitimer 安排将信号发送到您的进程。但最有可能的是,做您想做的事情的最佳方式是以下两种方式之一:

  1. 使用事件循环。基本上,将您的程序编写为一个巨大的循环,定期检查是否有任何需要做的事情。在循环中,检查时间、检查按键等等。做一些你需要做的事情,然后再次循环。

  2. 使用线程。您可以有一个线程来观察时间和触发计时器作业。您可以让一个线程阻塞 read,以便在数据到达时充当中断。

您的脑海中可能已经深深地意识到,您在中断处理程序本身中所做的工作很少,通常只是将信息传递给在正常上下文中运行的其他代码。好吧,操作系统已经为您完成了这部分工作。您只需编写等待中断处理程序(或任何需要的)检测并开始处理事件的代码。

I want to have a thread in c++ running a code that constantly verifies the key being pressed at the moment without pressing the enter key (cin, getchar, etc).

那就这样吧。这需要一个线程,并且需要将终端的输入模式更改为不需要回车键的模式。这与中断无关。

关于c++ - 使用 c++ 和 x86 和 x64 架构访问处理器中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12187269/

相关文章:

java - 以编程方式检测 BlackBerry 设备及其 PIN

c# - 使用 CreateProcessAsUser 启动 url

c++ - 将软件移植到 Windows,我应该把/usr/share 东西放在哪里?

c++ - 设计此代码的最佳方式?

C++:ofstream 类将文件保存到哪里?

c - 为什么 gcc 不能正确添加 tmin + tmin?

c - 这些 typedef 在 C 中意味着什么?他们在宣布什么?

c++ - 合并函数参数的适当命名约定是什么?

c++ - 调用指向成员函数的指针时出错

c++ - 如何从进程内部确定 CPU 和内存消耗