各位朋友,我有一点问题不太明白。我一个程序里使用了全局布尔量bStart,这个全局变量在各个子进程中都要使用,用于各进程是否继续操作,还是暂停。 在这方面是不是应该设一个event来处理,用resetevent来暂停操作,用setevent来继续操作? 我的想法是不需要设event,因为进程虽然说是同步的,其实在CPU处理时依然是异步的,只不过分时操作而已,所以对全局布尔量的存取不会发生冲突。在我说的这种情况下,我完全可以通过全局布尔量bStart来完成我的需求,不需要用event。 不知我的想法是不是对?

解决方案 »

  1.   

    首先,你的全局变量bStart怎么实现在多个进程里面都能够看到,如果是多线程还可。
    另外,所谓的event跟你的全局变量bStart的道理一样的,因为你的全局变量一般只能你的进程看到,其他进程要特殊处理才能看到。所以操作系统专门提供了一个内存区域放内核变量,让所有进程都能够看到该块内存,其中的EVENT等都相当于放到该区域的系统级全局变量加上一些相关操作而已。
    总之,只要你能够实现bStart在整个操作系统中可见,一定程度上你就实现了event,也就不需要操作系统提供的event。显而易见,在操作系统的保护机制下,很难实现在整个操作系统中可见的变量,还是用event方便。
      

  2.   

    是这样的,我在一个A程序里设了 bool bStart;
    在其他引用其的B程序(另一个类)里设了extern bool bStart;
    这样在B线程运行时,可以找到bStart的
      

  3.   

    对不起,我的意思是指同一个程序里产生的多个thread,应该叫线程。我是指线程之间的读取共同变量的问题,并不是指多个程序之间读。没有说清楚,请原谅。
    这样是不是可以不用SetEvent了?
      

  4.   

    其实在CPU处理时依然是异步的,只不过分时操作而已,所以对全局布尔量的存取不会发生冲突。会发生冲突,考虑特殊情况。假设你有两个线程A和B,线程函数都一样如下
    Func()
    {
    if(bStart == false)
    {
    bStart = true;// 置标志,不让其他线程操作
    .......一些操作
    }
    }
    如果在if(bStart == false)语句和bStart = true语句之间CPU进行线程切换的话,就有问题。
      

  5.   

    同一个进程的线程之间同步,最好用CriticalSection,不必要用EVENT.