-5

为什么延迟在 gcc 中不可用?根据我的理解,延迟功能暂停程序,而睡眠功能使程序进入睡眠状态并执行上下文切换。如果我想停止我的程序 gcc 中的可用选项是什么?

4

2 回答 2

5

因为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),使用shutdownorhalt命令。

如果您只想停止您的特定程序(并让系统的其余部分照常运行其他进程),只需调用C 标准中的exit ( 3) 。

PS。如果您编写内核设备驱动程序,您应该在问题中明确说明,您确实应该了解更多关于 Linux 的信息。在某些驱动程序中,您可能会在遇到严重麻烦时调用一些恐慌函数。

于 2012-12-06T06:47:33.050 回答
0

如果你这样做了,sleep()那么操作系统会立即切换上下文。这种行为不满足你吗?换句话说,你想在给定的时间段内持有 CPU 并且什么都不做吗?然后做busy_waiting;for(; ; ;) break_if_time_elapses. 即使这样,您也无法逃脱操作系统基于时间片的上下文切换。所以它在很短的时间内有意义,小于操作系统的时间片。

于 2012-12-06T06:53:23.310 回答