[此答案由 Pedro Zorzenon Neto 贡献。]
函数usleep和nanosleep对于短时间间隔无效,因为内核[可能]会切换到另一个任务……
解决方案源于 I/O 指令。向 ISA 地址的 I/O 端口写入数据会导致系统等待 1 微秒,因为 ISA 总线访问时间是 1 微秒。i386 机器中有一个硬件从不使用的 I/O 端口,那就是端口 0x80。
因此,向 I/O 端口 0x80 写入一个字节将产生“一微秒延迟”。这个延迟不太精确,但至少它在奔腾 100 和 Athlon 850 之间的变化会小于 2%(根据我的测试)。
一些 GNU/Linux 底层驱动程序也使用这种写入端口 0x80 的“特性”。
附件是 程序 [和 头文件],我用它们来完成这个(我认为这些函数在 MS-DOS 中也可以使用inportb和outportb,但不确定)。
在 GNU/Linux 中,您需要 root 权限才能写入 I/O 端口。
返回
关于此 FAQ 列表 关于 Eskimo 搜索 反馈 版权
由
托管