用Sleep进行发送限速,不够准确。我是这么限的,但应该有更好的方法。 假定发送限速为 2M字节/秒。显然,相当于200K/100毫秒。那么每发送200K数据后,检查耗时,如果耗时小于100毫秒,那么就Sleep( 100-耗时 )这样做以后,结果不佷理想,一般速度都大过2M很多。有什么好办法,让速度在2M左右波动不大? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://bbs.nankai.edu.cn/blog/d/dadingdang/000649.html while循环加上GetTickCount,然后break 用GetTickCount进行计时,可以专门开一个线程做计时器。 参考:http://www.vckbase.com/document/viewdoc/?id=1301 或者使用多媒体定时器,参考:http://www.codeproject.com/miscctrl/multimediatimer.asp 可以使用多媒体计时器记时,精度可以到1ms,然后计算剩下时间转换为一个int 整数,没进一次 -1,等于0执行,下次发送操作////////////////////////////////////////////////////////////////////////////说明: 毫秒级定时器,平时的定时器以及Sleep()函数都是以55毫秒为精度的。// 这个多媒体定时器提供1ms精度//使用: 这个类封装了多媒体定时器,把头文件和源文件加入到你的工程就可以使用这个类,Link//中指定winmm.lib, 必须从CMMTimers派生一个类重载成员函数timerProc函数来使用定时器//timerProc 将在定时周期结束后被掉用,初始化一个类实例,构造函数参数是定时器的毫秒//分辨率,启动一个定时器掉用 startTimer. //////////////////////////////////////////////////////////////////////////class CMMTimers {public: CMMTimers(UINT resolution); virtual ~CMMTimers();////////////////////////////////////////////////////////////////////////////作用: 返回定时器分辨率////////////////////////////////////////////////////////////////////////// UINT getTimerRes() { return timerRes; }; ////////////////////////////////////////////////////////////////////////////作用: 启动定时器//参数: period 触发定时器的周期如10毫秒1次,oneShot 执行一次还是按周期循环执行//注意: 定时器只能启动一次,两次会导致多媒体定时器线程崩溃,启动第二次前必须// stopTimer////////////////////////////////////////////////////////////////////////// bool startTimer(UINT period,bool oneShot);////////////////////////////////////////////////////////////////////////////作用: 停止一个周期性定时器////////////////////////////////////////////////////////////////////////// bool stopTimer(); //定时器调用的函数,必须重载 virtual void timerProc() {}; protected: UINT timerRes; //定时器分辨率精度 UINT timerId; //定时器 ID BOOL m_bstopflag; //定时器停止标志}; GetTickCount准确。你是tcp还是udp。tcp没有必要限制速度把 求一个随机算法思路 CreateProcess的问题 如何判断"中国人"里面包含"中国"?解决立马送分!| 救急:怎样才能确认用LoadImage()引入位图资源是否成功? MAX_PATH 和 _MAX_PATH 有什么区别? 我要将一个 a.exe 文件的进程杀掉,怎么做? 急!有关CListCtrl的滚动条拖动事件!(在线等待) 急!!!多表查询??? 请教数据库操作的一些常识性问题 紧急求救!如何发送菜单消息 send/recv failed. error : WSAECONNRESET 问个简单问题
http://www.vckbase.com/document/viewdoc/?id=1301
http://www.codeproject.com/miscctrl/multimediatimer.asp
//////////////////////////////////////////////////////////////////////////
//说明: 毫秒级定时器,平时的定时器以及Sleep()函数都是以55毫秒为精度的。
// 这个多媒体定时器提供1ms精度
//使用: 这个类封装了多媒体定时器,把头文件和源文件加入到你的工程就可以使用这个类,Link
//中指定winmm.lib, 必须从CMMTimers派生一个类重载成员函数timerProc函数来使用定时器
//timerProc 将在定时周期结束后被掉用,初始化一个类实例,构造函数参数是定时器的毫秒
//分辨率,启动一个定时器掉用 startTimer.
//////////////////////////////////////////////////////////////////////////
class CMMTimers
{
public:
CMMTimers(UINT resolution);
virtual ~CMMTimers();
//////////////////////////////////////////////////////////////////////////
//作用: 返回定时器分辨率
//////////////////////////////////////////////////////////////////////////
UINT getTimerRes() { return timerRes; };
//////////////////////////////////////////////////////////////////////////
//作用: 启动定时器
//参数: period 触发定时器的周期如10毫秒1次,oneShot 执行一次还是按周期循环执行
//注意: 定时器只能启动一次,两次会导致多媒体定时器线程崩溃,启动第二次前必须
// stopTimer
//////////////////////////////////////////////////////////////////////////
bool startTimer(UINT period,bool oneShot);
//////////////////////////////////////////////////////////////////////////
//作用: 停止一个周期性定时器
//////////////////////////////////////////////////////////////////////////
bool stopTimer();
//定时器调用的函数,必须重载
virtual void timerProc() {};
protected:
UINT timerRes; //定时器分辨率精度
UINT timerId; //定时器 ID
BOOL m_bstopflag; //定时器停止标志};