只为进程初始化关键部分一次

在一个multithreading的应用程序,有没有一种方法来确保只有一个关键部分初始化,除了把代码放在DLL main()?

Solutions Collecting From Web of "只为进程初始化关键部分一次"

我建议用一个类来处理CRITICAL_SECTION,该类将在其构造函数和析构函数中处理临界区对象的初始化和未初始化。 这样,在大多数情况下,你将是线程安全的(你必须确保没有人在构造函数完成之前访问对象,但这相对容易)。

有几个常见的包装CRITICAL_SECTION可以使用。 MFC的CCriticalSection是明显的选择,但你也可以创建自己的。

在Windows Vista上,您可以使用一次性初始化功能。 使用一次性初始化显示如何使用它们来确保事件只被初始化一次。

当然有很多种方法。

  1. 使用全局变量
  2. 使用一个单例实例
  3. 在主要或其他单个实例函数中创建它
  4. 将其创建为某个单一实例类实例的成员变量

等等。 这与尝试在代码中创建某个事物的单个实例的任何其他问题没有任何区别。

您也可以使用包装类并声明该类的全局对象。 全局对象的构造函数在启动时只会被调用一次。

您可以在DllMainDLL_PROCESS_ATTACH初始化全局关键部分(并清除DLL_PROCESS_DETACH )。