sleep()会阻塞吗?

时间:2014-11-11 03:49:12

标签: c sleep blocking multicast

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

我也是多播组的一员,我也会收到该组中其他发件人的邮件。

我的问题是,我是否可以使用sleep(X)发送消息,同时仍然从组中接收其他消息并处理它们?或睡眠()阻止?

3 个答案:

答案 0 :(得分:3)

Sleep会阻止所有执行,但仅限于您调用它的线程。我建议你创建两个线程,一个用于广播,一个用于监听。然后确保将线程之间共享的任何数据与Mutexes同步。

答案 1 :(得分:2)

当您致电sleep()时,只有主叫线程被暂停。所有其他线程将继续运行,因此您可以继续接收并发运行的线程上的数据。

答案 2 :(得分:1)

是的,sleep正在阻止。您还没有说 您是如何实现服务器的,但如果它是select循环的话,您应该使用timeout参数来选择{ {1}}或gettimeofday和一些算术确定下次你应该发送消息的时间是,你是否已经过了那个时间,如果不是,那么到时间到了多久(可以使用)对于选择超时)。 clock_gettimetimeraddtimersub宏可以为您提供帮助。