关于winsock延迟一段时间发送数据的问题

fishyx 2003-11-18 03:42:10
我现在识别了一个信息以后,希望让客户机发送一个消息到服务器,但我希望在识别后能延迟一段时间发送(比如延迟1秒钟发送),同时在发送语句后面的语句不受该延迟的影响(也就是后面的语句不能同样的延迟1秒钟)。所以我不能用sleep语句。
不指导winsock有没有相关的属性和方法来解决这个问题,如果没有,能给我点建议吗?最好有代码示范
问题解决,一定给分!
...全文
107 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
AresChen 2003-11-19
  • 打赏
  • 举报
回复
另外,为什么需要延时哪?我不清楚你的需求,是需求需要延时,还是因为客户端反应过快,导致服务器端无法获取完整的返回数据?
如果是后者的话,建议你在服务器端建立一个接收缓冲,否则的话你现在延时1秒,以后万一用户的计算机性能更差,那可能就需要2秒,甚至也可能因为服务器上跑了其他应用,导致需要更长的延时。
因为不清楚你的需求,就先说这些吧。
AresChen 2003-11-19
  • 打赏
  • 举报
回复
明白你意思了,用sleep函数不行吗?
对不起,我在我自己的程序当中重来没有用过Sleep函数,所以不知道用Sleep或者类似的API是否可以满足你的需求。以前我也有过类似的需求,当时我是自己写了延时函数,我始终记不起为什么我不用Sleep函数。自己写的延时函数现在手头没有,原型大致如下:
dim blnTimerOn as Boolean '全局的变量

Private Sub Sleep2(byval SleepTime as long)
blntimeron=false
tmrSleep.inteval=sleeptime '设置延时时间,当然如果需要的延时有可能超过60秒的话,你可以采用每秒中激活一次timer,然后在去累加计算
tmrsleep.enabl......
for i=0 to 1 step 0
doevents
if blntimeron then exit for '到时候了就退出。
next i
end sub

sub tmrSleep_.....
blnTimer=true
end sub
fishyx 2003-11-18
  • 打赏
  • 举报
回复
没有人知道更好的办法了吗??
fishyx 2003-11-18
  • 打赏
  • 举报
回复
楼上的建议我也考虑过,但是如果我的程序中有多条语句需要做这种延迟呢?
比如:
if data1IsOk() then
延迟。。。
send(Data1)
end if

if data2IsOk() then
延迟。。。(延迟时间可能不同)
send(Data2)
end if
........
这样我就必须要多个timer
如果这样的情况比较频繁,管理起来就比较麻烦了
AresChen 2003-11-18
  • 打赏
  • 举报
回复
嗯~~~也许我没有完全搞清楚你的需求,但我的理解是你完全可以利用Timer,然后把客户端返回消息放在Timer里发送啊,比如:
function identifyData()
if dataIsOk() then
tmrSend.interval=10000
tmrSend.enabled=true
end if
end function

sub tmrSend_timer()
tmrSend.enabled=false '一定要在第一句,防止Timer事件重入。
sendOK()
end sub

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧