我正在改进一些在 x86 Windows 系统上模拟上下文切换调度程序的代码。该程序使用一些古老的 Borland C 编译器在 Windows XP(编辑:可能不是 Windows 7)上编译,并且正在移植到 MSVC 可编译。
在某一时刻,代码通过以下不可用的函数安装 ISR dos.h
:
void (*)() getvect(int)
void setvect(int, void (*)());
具体来说,代码为(循环)定时器中断安装了 ISR。电话是:
tick_isr_old = getvect(0x08);
setvect(0xF2, tick_isr_old);
setvect(0x08, (void interrupt (*)(void)) tick_isr);
setvect(0xF1, (void interrupt (*)(void)) context_switch_isr);
有谁知道设置这些 ISR 的合理方法是什么(可能使用 Windows API?)。更糟糕的是,这些函数是用汇编语言实现的(毕竟它们需要执行上下文切换......)。是否至少有任何文档涉及整数常量(0x08、0xF2、0xF1)所指的中断向量?谷歌并没有真正想出我可以使用的东西。
更新:由于显然不可能让这些 DOS 调用在 Windows 7 中工作,我需要一种在一般单线程环境中异步调用函数的方法。
在 linux 下,signal()
andraise()
函数可以做到这一点,但在 Windows 下,它们仅以尽可能最小的方式得到支持。有没有办法在 Windows 下实现?