如题,服务端winsock使用控件数组,客户端有多个。当其中一个客户端消息到达服务器端的时候,dataarrival事件触发,执行代码。假设要执行的代码比较多,在执行的时候又有另一个客户端发消息过来,dataarrival又触发,那这个时候会不会影响上一个dataarrival正在运算中的变量?如果会,应该怎样这个问题呢?麻烦给个详细思路。还有,当某个winsock控件正在给对方发消息的时候,对方有消息发过来了,会产生什么冲突吗?
调试欢乐多
dim a as integer
dim b as integersub wsk_dataarrival
a=a+1
b=b+1
'这里调用群发给客户端信息的代码
end sub
假设那个a=a+1和b=b+1的计算很多,需要1秒钟才能完成计算,在计算了半秒钟也就是计算了一半的时候,又收到了信息,然后也会计算 a=a+1。
假设,2个客户端都只发一次消息,而发信息的时间间隔为0.1秒,服务器计算完需要1秒。那么服务器就会在第1个客户端消息到达后正在计算的时候,又收到了第2个客户端的消息。然后又在计算变量。
理论上讲,当第一个客户端的消息到达服务器后,服务器反馈给客户端的消息是a=1,b=1。第2个客户端消息到达后是a=2,b=2。我想问的是,第一个客户端消息到达服务器,服务器反馈给客户端的时候会不会成了 a=2,b=1。也就是受第2个客户端消息到达时运行了a=a+1的计算的影响。就是这个意思。不知道说明白没有。
sub wsk_dataarrival
a=a+1
b=b+1
'这里调用群发给客户端信息的代码 ,以上要计算完才会到这里
end sub
其实我就是想要一个这样的答案或者相反的答案。
我的期望是,当收到第1个客户端的消息后开始处理数据,在处理数据的过程中,就算又有新消息到达,也不会立即触发dataarrival事件。这样就不会影响到服务器第1次发送反馈消息的数值了。
即:
还是上面的举例。第1个客户端消息到达后,开始计算,计算到一半的时候,又一个消息到达,在还没有处理完第1个消息的时候不响应第二个消息。
是不是?