你的思路也是可以的
至于说线程的知识,可以网上找点例子代码来参考一下
创建线程的相关函数有
CreateThreadEx() -- win32api
_beginthreadex() c++接口函数
具体用法请自己找一下参考资料

解决方案 »

  1.   

    首先汗一个,我也不知道mfc能起多少线程,我用到过10多个是可以的。
    另外,如果发送的数据量不大,并且目标点不多的话,你为每个目标建立线程的收益并不大。
    比如你有60个目标,那么你要起60个线程,如果循环起60个线程耗时不比你一个线程循环发60次数据短的话,就没有必要。
    或者你也可以做类似线程池一样的东西,做一个IP队列,起一个单独的线程检测IP,往队列里插,另外起3-5个(起多少看情况)线程从队列里取出来发送,循环往复直至队列空。当然你也可以试试mfc能不能起多线程,如果可以的话,你的60个线程可以在线程中起,这样更快,比如所有线程都执行如下线程函数
    Fun()
    {
        while(--a>= 0)//a为全局信号量,初始值为60
        {
           起线程;//线程函数依然是Fun       
        }    发送数据;
    }当然,以上方法要注意线程的同步,在操作队列和信号量时。
      

  2.   


    嗯 我可能说的不大明白。我举个简单的例子。
    现在有5个ip端 XX.1,XX.2,XX.3,XX.4,XX.5当前我所做的事情是,轮训到XX.1  立即对1发送数据(这个数据大概有60条udp数据包),算上超时时间的处理。这样1个ip的发送就差不多用了5-10秒。再取XX.2然后XX.3。。这样总时间就会比较长。显得很不合理。
    所以呢。我看您的这个说法,貌似不大行。能否再说细点?
      

  3.   


    其实。最终目的是这样的。11个设备。1号对2-11号 完全复制内容。现在我是2 3 4 这样来。每一次发送耗时5-10秒。这样起码1分钟了。
    现在我需要同时发送到2-11.
    我考虑的问题:
    1,到底需要复制多少份,是未知的。
    2,每条发送的内容,socket和端口是否需要另外创建,还是说可以通过一个socket和端口发送接受数据。
      

  4.   


    其实。最终目的是这样的。11个设备。1号对2-11号 完全复制内容。现在我是2 3 4 这样来。每一次发送耗时5-10秒。这样起码1分钟了。
    现在我需要同时发送到2-11.
    我考虑的问题:
    1,到底需要复制多少份,是未知的。
    2,每条发送的内容,socket和端口是否需要另外创建,还是说可以通过一个socket和端口发送接受数据。
    这样就要看你5-6秒耗时是花在查询IP上还是花在发送上了。如果纯粹的几K内容的话,发送一次应该花不了5-6s那么长吧。
    socket可以用用一个,但是有缓冲区大小,如果数据太大,也得排队,你可以固定用几个。
      

  5.   


    嗯 我可能说的不大明白。我举个简单的例子。
    现在有5个ip端 XX.1,XX.2,XX.3,XX.4,XX.5当前我所做的事情是,轮训到XX.1  立即对1发送数据(这个数据大概有60条udp数据包),算上超时时间的处理。这样1个ip的发送就差不多用了5-10秒。再取XX.2然后XX.3。。这样总时间就会比较长。显得很不合理。
    所以呢。我看您的这个说法,貌似不大行。能否再说细点?
    刚看到你有超时等待,那么在网络环境不好每次都超时的情况下确实比较耗时。
    另外你刚说的目标个数不确定是有设备随时上下线导致个数动态变化吧?
    你的设备一发送频率是多少?是每发送完一轮就进行下一轮吗?
      

  6.   


    其实。最终目的是这样的。11个设备。1号对2-11号 完全复制内容。现在我是2 3 4 这样来。每一次发送耗时5-10秒。这样起码1分钟了。
    现在我需要同时发送到2-11.
    我考虑的问题:
    1,到底需要复制多少份,是未知的。
    2,每条发送的内容,socket和端口是否需要另外创建,还是说可以通过一个socket和端口发送接受数据。
    如果你每次发送都有这么长时间,那么即使多线程,其实时间提高不了多少。
      

  7.   

    你可以采用多播方式,不用广播的话WSAJoinLeaf