发新话题
打印

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

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

敝人最近在写个程序,
- L8 O6 v5 ]* s+ O
( v8 |8 x2 x7 ]" j% v+ i" C4 H6 P8 c建立套接字后,要接收网络中发过来的数据流(无连接),+ l# ]+ @3 e; e
每次收到之后并不直接发送响应,而是要先等待1秒中以后,0 G* K- L; _$ A' l( R( K+ O
如果简单的在while(1)循环中接收数据,然后sleep(1)," f. s3 q$ N2 ]/ P
那么当网络中数据包多时,在1秒内sleep会被中断,
# L8 o4 ^6 A. f  s- \- `7 B如何才能实现不会中断延迟的1秒种,又不会丢弃网络中发过来的数据。
" n$ H3 O/ m/ ~( q- V% E
& M9 N1 X( F  e; a, _& k% y
我考虑过用线程实现,但是担心同样存在问题,! ]# c* ]; p5 n5 O) E+ `5 o: O" B- i' S
哪位大哥有这样的实践,给点建议啊,小弟谢过了,
      

TOP

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

TOP

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

TOP

发新话题