我有一些在Windows上编译的源代码.我正在将其转换为在Red Hat Linux上运行.
源代码包含<windows.h>头文件,程序员使用该Sleep()函数等待一段时间.这不适用于Linux.
但是,我可以使用该sleep(seconds)函数,但在几秒钟内使用整数.我不想将毫秒转换为秒.有没有替代睡眠功能,我可以在Linux上使用gcc编译?
现在有一些我一直想知道的事情:sleep()是如何实现的?
如果只是使用操作系统中的API,那么API是如何制作的?
这一切都归结为在CPU上使用特殊的机器代码吗?那个CPU是否需要一个特殊的协处理器或其他小玩意,没有它你就不能睡觉()?
睡眠()的最着名的化身在C语言中(更准确地说,在C编译器附带的库中,例如GNU的libc),尽管现在几乎每种语言都有它的等价物,但是在某些语言中实现了睡眠(认为Bash)不是我们在这个问题上看到的......
编辑:在阅读了一些答案之后,我看到该进程被置于等待队列中.从那里,我可以猜出两种选择
答案只提到备选1.因此,我问:这个计时器如何表现?如果这是一个让内核唤醒进程的简单中断,那么内核如何要求定时器"在140毫秒内唤醒我,以便我可以将进程置于运行状态"?
在我的应用程序中,有一个专用的io-thread
应用程序通过不同的线程处理数据.此外,要求规定未确认的窗口大小应为1,即任何时候应该只有一个未确认的未确认消息.这意味着如果io-thread已经通过套接字发送了一条消息,它将不再发送任何消息,直到它从接收方听到一个确认消息.应用程序的处理线程通过管道与io-thread通信.如果来自linux CLI的人键入ctrl + C,应用程序需要正常关闭.因此,鉴于这些要求,我有以下选择
我有以下问题
select()和poll()之间的决定.我的应用程序只处理少于50个文件描述符.可以假设我选择选择或民意调查没有区别吗?
select()和pselect()之间的决定.我阅读了linux文档,它说明了signal和select之间的竞争条件.我没有信号经验,所以有人可以更清楚地解释竞争条件和选择()吗?它是否与某人在CLI上按ctrl + C并且应用程序没有停止有关?
pselect和ppoll()之间的决定?对一个与另一个的任何想法
我正在编写一个关于iPhone音频的章节,并且遇到了一段我无法理解的代码:
while (aqc.playPtr < aqc.sampleLen)
{
select(NULL, NULL, NULL, NULL, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
(完整代码示例在第163-166页).根据我对代码的理解,音频正在另一个线程上处理,而while循环就是为了防止主线程在音频仍在处理时终止.
我不明白的是为什么select()要用来代替sleep().
从我所读到select()的用于监视I/O的变化并传递它的NULL并没有做任何有意义的事情.我已经运行了代码sleep(),它按预期工作.(我对低级别POSIX的了解几乎不存在.)