为什么延迟在 gcc 中不可用?根据我的理解,延迟功能暂停程序,而睡眠功能使程序进入睡眠状态并执行上下文切换。如果我想停止我的程序 gcc 中的可用选项是什么?
2 回答
因为delay
据我所知,不在 C99 或 C2011 标准中。
C 标准在 API 上很差(它主要知道FILE*
一些内存操作,如malloc
,一些字符串操作,和setjmp
......;它不知道目录或延迟)。
上下文切换在纯标准 C 中没有意义。(它只在多任务操作系统 à la Unix 上有意义)。
(非标准C)编程环境应提供延迟功能。在 Linux 上,它是 Posix 的超集,确实具有睡眠和许多其他功能。您可以使用sched_yield(2)系统调用来“强制”上下文切换。
你应该读一些像Advanced Linux Programming这样的书。也许要停止您想要使用sync(2)和reboot(2)系统调用的系统,但这可能是个坏主意;您可能想要运行,例如system(3)
,使用shutdown
orhalt
命令。
如果您只想停止您的特定程序(并让系统的其余部分照常运行其他进程),只需调用C 标准中的exit ( 3) 。
PS。如果您编写内核设备驱动程序,您应该在问题中明确说明,您确实应该了解更多关于 Linux 的信息。在某些驱动程序中,您可能会在遇到严重麻烦时调用一些恐慌函数。
如果你这样做了,sleep()
那么操作系统会立即切换上下文。这种行为不满足你吗?换句话说,你想在给定的时间段内持有 CPU 并且什么都不做吗?然后做busy_waiting;for(; ; ;) break_if_time_elapses
. 即使这样,您也无法逃脱操作系统基于时间片的上下文切换。所以它在很短的时间内有意义,小于操作系统的时间片。