《windows核心编程》上关于“CriticalSetion”,说可以使用多个来应对多个数据变量。
但,因为“CriticalSetion”的细节没公开,但,程序中并没有指定哪个“CriticalSetion”对应哪个变量作保护。难道系统已经能够确定它自己保护的是谁了?另外,由于书中基本以全局变量来解决数据的问题。那么事实上,可以传递的线程参数也就只能是一些值变量,让参数的价值大打折扣。我这样理解对不对?另外,即使县城参数PVOID类型,但也只能传递全局变量的地址。因为,如果传递的是来自某个函数的局部变量的地址,显然是无效的。这样理解对不?以上的三个问号有高人能说一说吗?

解决方案 »

  1.   

    在EnterCriticalsetion 和 LevealCriticalsection之间内存空间全部保护。不对,编写程序的时候不推荐使用全局变量。改动起来非常繁琐。有时也可以是局部变量,全局与局部有时候真是概念上的差异。
      

  2.   

    我也知道全局变量的问题。事实上,我极不愿意这样用。但无论哪个函数创建线程,其内的变量必然是属于该函数内部的局部变量,对外部无效。这时,即使局部的static变量也没办法。难道还有不用全局变量的办法吗?反正书上的都是全局变量。而且论坛里很多人说什么应用窗口句柄传消息。但要知道,这个窗口句柄是在另一个线程里的变量。即使传过来,也是无效句柄。我哪里错了?望指正。
      

  3.   

    但也有一个问题。即根据VC调试得知,DLL与主程序的入口不同。且给我的感觉:分明就是两个程序;因为DLL的全局变量对主程序不可见。难道我理解错了?或者应该EXPORT DLL中的变量吗?没听说过。有人教教我吗?