【发布时间】:2010-10-17 23:54:24
【问题描述】:
在多线程应用程序中,除了将代码放入 DLL main() 之外,有没有办法确保关键部分只初始化一次??
【问题讨论】:
在多线程应用程序中,除了将代码放入 DLL main() 之外,有没有办法确保关键部分只初始化一次??
【问题讨论】:
在 Windows Vista 上,您可以使用一次性初始化功能。 Using One-Time Initialization 展示了如何使用它们来确保事件只被初始化一次。
【讨论】:
我建议将 CRITICAL_SECTION 包装在一个类中,该类将在其构造函数和析构函数中处理临界区对象的初始化和取消初始化。这样,在大多数情况下,您将是线程安全的。 (您必须确保在其构造函数完成之前没有人访问该对象,但这相对容易。)
您可以使用几个常见的 CRITICAL_SECTION 包装器。 MFC 的CCriticalSection 是显而易见的选择,但您也可以创建自己的。
【讨论】:
当然有很多很多方法。
等等。这与尝试在代码中创建某个事物的单个实例的任何其他问题没有什么不同。
【讨论】:
您还可以使用包装类并声明该类的全局对象。全局对象的构造函数只会在启动时调用一次。
【讨论】:
您可以在DllMain 中为DLL_PROCESS_ATTACH 初始化一个全局临界区(并为DLL_PROCESS_DETACH 清理)。
【讨论】: