处理定时事件的最佳实践是什么C
?我正在查看的场景是,如果我在一秒钟内没有收到来自服务器的响应,我需要将数据从客户端重新发送到服务器。
代码会很好,但对概念的解释会更有价值。
大多数操作系统都有某种形式的计时器。在 Linux/Unix/Posix 你有alarm
,在 Windows 有SetTimer
因此,基本上,您发送一条消息,并将计时器设置为您希望得到回复的时间 - 1 秒、10 秒、30 秒 - 任何对您的情况有意义的时间。
如果您收到回复,则取消计时器,并执行您计划对回复执行的任何其他操作。如果在计时器触发之前没有回复到达,则再次发送[这可能意味着“发出信号量或标志”以再次发送,而不是在计时器的处理程序中实际执行此操作]。
对于其他操作系统,您必须告诉我们您正在查看的内容,但大多数操作系统都有某种机制来处理“告诉我 X 时间已过”。
这需要客户端和服务器之间的事先同步。此外,您必须有一个用于事件管理的库。计时器和 I/O 事件管理器库中提到了此类库。
如果您的程序使用非阻塞 I/O 并在 select() 或 poll() 内部进行阻塞,则这些函数有一个可选的 timeout 参数,可让您指定 select()/poll() 调用应在即使没有发生 I/O 事件,也已经过了一定的时间。您可以使用该功能让您的程序每隔一段时间执行一项操作。