在VB中我定义了一个全局变量
public  iCount as Interger在一个过程一中会iCount=iCount+1
在过程二中也会iCount=iCount+1
而这两个过程可能会同时被调用,
如何保证数据完整?多谢了

解决方案 »

  1.   

    难道sub没有执行的先后顺序?
      

  2.   

    是这样的,iCount =iCount +1会在winsock控件数据到达时调用,
    另一个过程是我手动调用的,点一个按钮调用,所以,这样可能会冲突,无法保证数据完整,
      

  3.   

    你放心,一般情况下,由于VB采用了线程Blocking技术,同一个CPU执行周期内只有一个线程处于运行状态,不会发生内存重入问题。
      

  4.   

    而VB的多线程支持不太好,建议不予考虑,如果真要使用多线程,可以选择VB.NET。
      

  5.   

    VB肯定是单线程的,lz不用担心先后问题
      

  6.   

    是这样的,iCount =iCount +1会在winsock控件数据到达时调用,
    另一个过程是我手动调用的,点一个按钮调用,所以,这样可能会冲突,无法保证数据完整,
    --------------------------------------------------------------------
    试着利用以下函数,它可能符合你的要求:
    Public Declare Function InterlockedDecrement Lib "kernel32" Alias "InterlockedDecrement" (lpAddend As Long) As Long
    这个函数用于对一个数加1,同时保证在加1完成之前,不会有别人也能对这个数加1。我想你可以在winsock控件数据到达时调用InterlockedDecrement(iCount)
    点一个按钮调用也调用InterlockedDecrement(iCount)
    ,函数的返回值是加1后的值。函数的详细说明参见msdn