我正在实现一个多播服务器,它每X秒向一个多播地址发送一条消息。
我也是多播组的一员,我也会收到该组中其他发件人的邮件。
我的问题是,我是否可以使用sleep(X)发送消息,同时仍然从组中接收其他消息并处理它们?或睡眠()阻止?
答案 0 :(得分:3)
Sleep会阻止所有执行,但仅限于您调用它的线程。我建议你创建两个线程,一个用于广播,一个用于监听。然后确保将线程之间共享的任何数据与Mutexes同步。
答案 1 :(得分:2)
当您致电sleep()
时,只有主叫线程被暂停。所有其他线程将继续运行,因此您可以继续接收并发运行的线程上的数据。
答案 2 :(得分:1)
是的,sleep
正在阻止。您还没有说 您是如何实现服务器的,但如果它是select
循环的话,您应该使用timeout
参数来选择{ {1}}或gettimeofday
和一些算术确定下次你应该发送消息的时间是,你是否已经过了那个时间,如果不是,那么到时间到了多久(可以使用)对于选择超时)。 clock_gettime
,timeradd
和timersub
宏可以为您提供帮助。