【发布时间】:2014-11-11 03:49:12
【问题描述】:
我正在实现一个多播服务器,它每 X 秒向多播地址发送一条消息。
我也是多播组的一员,我还将接收来自该组中其他发件人的消息。
我的问题是,我可以使用 sleep(X) 发送我的消息,同时仍接收来自组的其他消息并处理它们吗?还是 sleep() 阻塞?
【问题讨论】:
-
sleep的全部意义在于等待(阻塞)一段时间。
标签: c sleep blocking multicast
我正在实现一个多播服务器,它每 X 秒向多播地址发送一条消息。
我也是多播组的一员,我还将接收来自该组中其他发件人的消息。
我的问题是,我可以使用 sleep(X) 发送我的消息,同时仍接收来自组的其他消息并处理它们吗?还是 sleep() 阻塞?
【问题讨论】:
sleep 的全部意义在于等待(阻塞)一段时间。
标签: c sleep blocking multicast
Sleep 会阻止所有执行,但仅在您调用它的线程中。我建议您创建两个线程,一个用于广播,一个用于收听。然后确保将线程之间共享的所有数据与互斥锁同步。
【讨论】:
当您调用sleep() 时,只有调用线程被挂起。所有其他线程将继续运行,因此您可以继续在并发运行的线程上接收数据。
【讨论】:
是的,sleep 正在阻止。你还没有说如何你正在实现服务器,但如果它是在select 循环方面,你应该使用timeout 参数来选择,连同gettimeofday 或@ 987654325@ 和一些算术来确定下一次应该发送消息的时间是,您是否已经过了那个时间,如果没有,到时间到了多长时间(您可以将其用于选择超时)。 timeradd、timersub 和 timercmp 宏可以帮助解决这个问题。
【讨论】:
poll 将其超时作为整数毫秒而不是struct timeval,因此您必须进行一点转换。