我使用route add/del进行路由的添加,尤其需要添加的路由条数较多,耗时比较长。
可不可以用route一次添加或者删除多条路由的,我也试过CreateIpForwordRow函数,但是一直调用成功。
我用如下的方法进行路由添加,添加路由的时候CPU会占用到100%。
环境为WIN7 + VS2008。while(...)

WinExec("route add 1.1.1.1 mask 2.2.2.2 3.3.3.3", SW_HIDE); 
Sleep(50);
}

解决方案 »

  1.   

    你都已经用了Sleep,CPU还占100%,说明你的工作本来就超载了。现在不都流行WMI编程么,那个感觉挺不错的。
      

  2.   

    CreateIpForwordRow调用成功?
    还是笔误?
      

  3.   

    我在本机测试成功,你自己改下. MIB_IPFORWARDROW  row = {0};
    row.dwForwardDest = inet_addr("0.0.0.0"); //目标网络
    row.dwForwardMask = inet_addr("0.0.0.0"); //掩码
    row.dwForwardProto = MIB_IPPROTO_NETMGMT;
    row.dwForwardType = MIB_IPROUTE_TYPE_DIRECT;
    row.dwForwardMetric1 = 20; //route print 里的Metric
    row.dwForwardIfIndex = 0x20003; //网卡索引,用GetAdapterIndex()获取,用arp -a,route print可以查看本机网卡的索引
    row.dwForwardNextHop = inet_addr("192.168.0.226"); //网关
    DWORD dwRet = ::CreateIpForwardEntry(&row);
      

  4.   

    我看了一下,主要是dwForwardMetric1 这个参数我一直都是指定的1.
    但是这个参数不可能每次都通过route print才能得到的啊。需要从代码得到。
      

  5.   

    XP下测试的.dwForwardMetric1 这个参数,应该是可以随意的,
    据我观察,这个值越小,似乎优先级越高,
    比如说同一网络有两个网关时,优先从dwForwardMetric1小的组值转发.