?????VB中WINSOCK的DataArrival事件响应?????
VB中WINSOCK是不是在有数据包到达的时候就立刻触发了DataArrival事件?还是在有数据包到达时先等待正在执行的过程执行完后才触发?
我用数组做了一个队列,当有数据到达时就先保存到数组里面,然后有空时再处理队列里的数据,我不知道当我在处理队列数据而同时又有一个数据包到达时,这时是先继续处理完我的数据再去响应DataArrival事件还是立刻中断数据处理直接响应DataArrival事件?
[解决办法]
当建立一个winsock控件的连接时,winsock会增加一个独立于VB主线程外的一个sock线程(注意就一个,以后无论加载多少winsock,也就这么一个线程),当winsock受到对方的数据时,sock线程会将数据存入缓存,当VB主线程空闲时(或主线程遇到doevents时),会检查缓存中是否有数据,如果有,则激发data_arrival,而由于所有的数据都是存入缓存的,所以当有两条数据在缓存是会只会激发一次data_arrival而Getdata时将所有数据全部拿出来
[解决办法]
sock线程 不用你操心,也不允许你操心
data_arrival 是VB程序的线程,在没有处理这arrival里面代码前是不会再有data_arrival事件发生,我是这么认为的!