有两个问题,希望高手能给于解答。
winsock是数组,我的是服务端,有N个客户端。
问题1:客户端1连接后 
winsock(N).GetData a (//假设a=1) 
需要对a进行处理,如果在a还没处理完成的时候,客户端2就发送数据过来。那么winsock(N).GetData a //假设(a=2)如果是这样,那a的值就变了。我的理解的错吗?需要怎样解决这个问题?是否应该
dim a(1-N)问题2:
winsock产生了N个连接,这N个连接是不是多线程的?比如 winsock(1)接收到数据后,正在处理数据的过程中,winsock(2)接收到数据,也需要进行与winsock(1)同样的数据处理,那是否等winsock(1)处理完后才处理winsock(2)的?还是同时进行处理?
请问题指点小弟。

解决方案 »

  1.   

    winsock产生了N个连接,这N个连接是多线程的.这句话貌似跟vb是单线程有冲突, 其实是这么回事.
    vb调用activex控件, 比如winsock, 在产生连接的时候, activex控件(也就是一个dll)
    会生成多个线程, 他们同时接收数据, 发送数据.
    但是, 收到数据的时候,  他们会给vb主线程一个消息,
    当vb的主线程在空闲的时候(即经过一次消息循环),  变会调用那个winsock_dataarr..事件
    , 收到数据后, 跟发送这个消息有关的线程的缓冲区便会把他删除.
    可能在处理这个数据时, 另一个连接的线程也收到了数据, 给vb主线程发送了线程消息.
    但是没关系, 主线程会在下一个空闲的时候再处理.现在应该明白问题1的答案了吧
      

  2.   

    我的建议是每收到一条指令放入队列,然后用TIMER控件进行定时俟个处理..