gpt4 book ai didi

我可以在 C 中实现单线程计时器吗?

转载 作者:太空宇宙 更新时间:2023-11-04 10:12:20 25 4
gpt4 key购买 nike

我正试图在 C 中实现一个通信协议(protocol)。我需要实现一个计时器(这样,如果一段时间后还没有收到 ACK,发送方就会认为数据包已经丢失并再次发送)。

在一个看起来像 C 的伪代码中,我想要这样的东西:

if (!ack_received(seqn) && timer_expired(seqn)) {
send_packet(seqn);
start_timer(seqn);
}

注意:seqn是发送包的序号。 每个数据包都需要一个个人计时器

如何实现timer_expiredstart_timer?有没有办法不使用多个线程来做到这一点?

最佳答案

Can I implement a single threaded timer in C?

可能不在纯可移植 C99(或单线程 C11,参见 n1570)中。

但在实践中,您经常会为一些 operating system 编写代码,然后您将获得一些设置计时器的方法。在 Linux 上,阅读 time(7)第一的。您可能还想使用多路复用调用,例如 poll(2) (你给延迟)。并了解更多其他system calls , 所以读 intro(2) , syscalls(2)和一些不错的 Linux 编程书籍(可能是旧的 ALP ,可免费下载)。

顺便说一句,您似乎在编写与网络相关的代码。您实际上需要一些 API(例如 Berkeley sockets ),因此您可能会使用类似于操作系统的东西。

很多event loops是单线程的,但提供某种计时器。

或者(如果您没有任何操作系统)您可能正在为一些小型嵌入式硬件平台(例如 Arduino -like)编写一些独立的 C。然后你有一些方法来轮询网络输入和设置定时器。

关于我可以在 C 中实现单线程计时器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48283686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com