为什么在gcc中没有延迟

时间:2012-12-06 06:38:11

标签: c linux

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

2 个答案:

答案 0 :(得分:5)

因为delay据我所知,不是C99或C2011标准。

C标准在API上非常差(它主要知道FILE*,一些内存操作如malloc,一些字符串操作和setjmp ......;它没有了解目录或延迟。)

在纯标准C中,上下文切换没有意义。(仅在Unix的多任务操作系统上才有意义。)

延迟功能应由(非标准-C)编程环境提供。在Linux上,它是Posix的超集,它确实具有sleep和许多其他功能。您可以使用sched_yield(2)系统调用来“强制”上下文切换。

你应该阅读一些像Advanced Linux Programming 这样的书。也许要停止你想要使用sync(2)reboot(2)系统调用的系统,但这可能是一个坏主意;你可能想要跑步,例如使用system(3)shutdownhalt命令。

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

PS。如果你编写一个内核设备驱动程序,你应该在问题中明确说明,你真的应该学习更多关于Linux的知识。在一些驱动程序中,你可能会在陷入困境时调用一些恐慌功能。

答案 1 :(得分:0)

如果你sleep(),那么操作系统会立即切换上下文。这种行为不能满足你吗?换句话说,您想要保留CPU并在给定时间段内不执行任何操作吗?然后忙着等待; for(; ; ;) break_if_time_elapses。即使这样,您也无法通过操作系统逃避基于时间片的上下文切换。因此它在非常短的时间内有意义,低于OS的时间片。