g*********n 发帖数: 43 | 1 我想测试一下用UDP的SENDTO 最快能够以多大速率发送数据。用了下面的程序:
for(i=0;i
sendto(..........);
问题是,当LOOPCOUNT是比较小的数(1000)时,程序能够很快 结束。但是当LOOPCOUNT比
较大时, 程序需要的时间极长极长。应该不是合理的情况。
我作了一点改动,
for(i=0;i
{
sendto(..........);
printf(""); //add some delay
}
在这种情况下程序能够较快的结束。
为什么会有这种情况发生?
不应该是collision of Ethernet,因为LOOPCOUNT=1000时碰撞也可能发生。
有没有这种可能,系统内部有缓冲区,
快速发送时,来不及从网卡上发走的数据存在缓冲区。
如果LOOPCOUNT比较小的话, 缓冲区能够容纳;
如果LOOPCOUNT很大, 在某个时刻缓冲区溢出,导致速度下降。
如果加上DELAY, 则可以保证缓冲区不会溢出。
请各位大侠指教。 |
|
b******n 发帖数: 823 | 2 写了个用string的
#include
#include
int main(int argc, char* argv[])
{
using namespace std;
cout << 1 << endl;
string s1, s2;
s1.push_back('1');
s1.push_back('1');
int loopcount = 0;
while(loopcount++ < 10)
{
cout << s1 << endl;
s1.push_back('a');
int i;
for (i=0; i
{
int dupsize = 1;
while(s1[i] == s1[i+1])
{
dupsize++;
i++ |
|
d****p 发帖数: 685 | 3 You can do that with boost's BOOST_PP_REPEAT in boost preprocessor lib.
sth like
#define RUN_FUNC_IN_LOOP(unused, loopCount, funcToRun) funcToRun(n);
where funcToRun looks like void funcToRun(int n)
So the loop is BOOST_PP_REPEAT(1000, RUN_FUNC_IN_LOOP, yourFunc)
But it is a bad idea since the code is unreadable to most people.And if the
n is large ... |
|
j**u 发帖数: 6059 | 4 imwrite(D,map,'gif_example.gif','DelayTime',0.2,'LoopCount',inf) |
|