【问题标题】:Does sleep() block?sleep() 会阻塞吗?
【发布时间】:2014-11-11 03:49:12
【问题描述】:

我正在实现一个多播服务器,它每 X 秒向多播地址发送一条消息。

我也是多播组的一员,我还将接收来自该组中其他发件人的消息。

我的问题是,我可以使用 sleep(X) 发送我的消息,同时仍接收来自组的其他消息并处理它们吗?还是 sleep() 阻塞?

【问题讨论】:

  • sleep 的全部意义在于等待(阻塞)一段时间。

标签: c sleep blocking multicast


【解决方案1】:

Sleep 会阻止所有执行,但仅在您调用它的线程中。我建议您创建两个线程,一个用于广播,一个用于收听。然后确保将线程之间共享的所有数据与互斥锁同步。

【讨论】:

    【解决方案2】:

    当您调用sleep() 时,只有调用线程被挂起。所有其他线程将继续运行,因此您可以继续在并发运行的线程上接收数据。

    【讨论】:

      【解决方案3】:

      是的,sleep 正在阻止。你还没有说如何你正在实现服务器,但如果它是在select 循环方面,你应该使用timeout 参数来选择,连同gettimeofday 或@ 987654325@ 和一些算术来确定下一次应该发送消息的时间是,您是否已经过了那个时间,如果没有,到时间到了多长时间(您可以将其用于选择超时)。 timeraddtimersubtimercmp 宏可以帮助解决这个问题。

      【讨论】:

      • 我实际上打算为此使用 poll()
      • @umdcoder 同样适用,除​​了poll 将其超时作为整数毫秒而不是struct timeval,因此您必须进行一点转换。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-20
      相关资源
      最近更新 更多