发新话题
打印

【求助】接收数据后如何实现延迟1秒再发送响应?

【求助】接收数据后如何实现延迟1秒再发送响应?

敝人最近在写个程序,
' l& a# s  Y$ P( J/ e  V! @* m1 K- e) x5 n
建立套接字后,要接收网络中发过来的数据流(无连接),! S+ I$ E# Q  o% N6 e0 p7 A6 k4 e
每次收到之后并不直接发送响应,而是要先等待1秒中以后,( m/ ]; [$ ]5 H! S- {' ?
如果简单的在while(1)循环中接收数据,然后sleep(1),9 M5 P# N" a5 s) i7 C
那么当网络中数据包多时,在1秒内sleep会被中断,
( ?0 Q/ `# Y4 E4 x6 C. T如何才能实现不会中断延迟的1秒种,又不会丢弃网络中发过来的数据。
  V# Y. C5 S1 d8 @5 |( Q
6 \, i9 q& u) x7 H
我考虑过用线程实现,但是担心同样存在问题,
  t; _8 c- y! o1 p8 N% ]1 D' q哪位大哥有这样的实践,给点建议啊,小弟谢过了,
      

TOP

没有做过这样的东西,权当是参考吧。
+ @7 o; g) m8 q3 K" M分三个处理部分来考虑,就当是三个线程看。一个阻塞监视套接字,有数据包就唤醒第二个。第二个创建后休眠,唤醒后接收数据然后组发送包(这里发送队列加个时间标志),然后唤醒第三个发送线程,第三个线程唤醒后检查发送队列的时间戳,如果发现间隔一秒就发送,没有就继续休眠一秒。      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

后来想了想,第三个线程的休眠还是有点欠妥,有两种方式,一个是休眠时间改为当前时间-队列首发送时间-1秒,不过精度难以保证。还有一种方式是把发送加在第二个线程处理,也就是说第二个线程先查询发送队列的时间标志,是否有需要发送的,处理后再接收数据并组包加入发送队列,然后以队列首发送时间计算设置休眠间隔。      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

发新话题