各位朋友,我有一点问题不太明白。我一个程序里使用了全局布尔量bStart,这个全局变量在各个子进程中都要使用,用于各进程是否继续操作,还是暂停。 在这方面是不是应该设一个event来处理,用resetevent来暂停操作,用setevent来继续操作? 我的想法是不需要设event,因为进程虽然说是同步的,其实在CPU处理时依然是异步的,只不过分时操作而已,所以对全局布尔量的存取不会发生冲突。在我说的这种情况下,我完全可以通过全局布尔量bStart来完成我的需求,不需要用event。 不知我的想法是不是对?
另外,所谓的event跟你的全局变量bStart的道理一样的,因为你的全局变量一般只能你的进程看到,其他进程要特殊处理才能看到。所以操作系统专门提供了一个内存区域放内核变量,让所有进程都能够看到该块内存,其中的EVENT等都相当于放到该区域的系统级全局变量加上一些相关操作而已。
总之,只要你能够实现bStart在整个操作系统中可见,一定程度上你就实现了event,也就不需要操作系统提供的event。显而易见,在操作系统的保护机制下,很难实现在整个操作系统中可见的变量,还是用event方便。
在其他引用其的B程序(另一个类)里设了extern bool bStart;
这样在B线程运行时,可以找到bStart的
这样是不是可以不用SetEvent了?
Func()
{
if(bStart == false)
{
bStart = true;// 置标志,不让其他线程操作
.......一些操作
}
}
如果在if(bStart == false)语句和bStart = true语句之间CPU进行线程切换的话,就有问题。