首页| 论坛| 消息

标题:socket限速问题
作者:scerzz
日期:2006-05-18 15:01
内容:

写了个传文件的函数,为了实现限速,使用的是线程睡眠
就是传送一定字节后睡眠线程,睡眠后再继续写数据
qt版本是
4.1.1
发现个问题,
当write数据后,程序返回了写入的数据
然后我用waitForBytesWritten来等待数据的传送完,如果数据传送过多就睡眠
问题就是这里,好象线程睡眠后数据就不传送了,然后等所有要写入的数据全部写入完后(一个while循环写入),socket才开始传送(当然在睡眠那过程中还是有点数据传送的,但和实际设定的不符合,等数据全部写入完毕后,数据就会不停的往客户那边传输,速度超过预想的,应该是最大速度传输了)
我现在希望的就是写入数据后,能够怎么样确认是否数据真的已经传送到客户,且中间使用时间
本来想以waitForBytesWritten来实现,但好象不行。
有其他限速方面的方法也说一下啊,主要是学习socket编程,不是太懂啊

以下是代码
while(1)//进入无限循环传输数据
   {
       if(bufferseek >= buffersize)//缓存读取完毕
       {
           buffer.clear ();
           if((havewrite+buffersize)>prefile->len)
           {
               readFile(seek,(prefile->len-havewrite),buffer);
           }
           else
           {
               readFile(seek,buffersize,buffer);
           }
           bufferseek = 0;
           pcbuffer = buffer.data();
       }
       if(ratelimit>(buffer.size()-bufferseek))
       {
           eachwrite = pwsocket->write(pcbuffer,buffer.size()-bufferseek);
       }
       else
       {
           eachwrite = pwsocket->write(pcbuffer,ratelimit);
  ..


#1 [scerzz 05-18 15:44]
对不起,看落个函数
flush()//将写入缓存的数据发送出去
接触QT没多久,很多函数都不知道哦

回复 发表
主题 版块