2009-04-07 18 views

Respuesta

3

Sugiero que envuelva CRITICAL_SECTION con una clase que manejará la inicialización y desinicialización del objeto de sección crítica en su constructor y destructor. De esta forma, estarás protegido contra subprocesos en la mayoría de los casos (tendrás que asegurarte de que nadie acceda al objeto antes de que termine su constructor, pero eso es relativamente fácil).

Existen varias envolturas comunes para CRITICAL_SECTION que puede usar. La opción obvia es CCriticalSection de MFC, pero también puede crear la suya propia.

1

Seguro que hay muchas formas.

  1. Utilice una variable global
  2. utilizar una instancia singleton
  3. Cree que en el principal o alguna otra función de instancia única
  4. crearlo como miembro var de alguna instancia única clase ejemplo

y así sucesivamente. Esto no es diferente de cualquier otra cuestión de tratar de crear una instancia única de algo en su código.

0

También puede usar una clase contenedora y declarar un objeto global de esa clase. El constructor del objeto global se invocará solo una vez al inicio.

5

En Windows Vista puede usar las funciones de inicialización de una sola vez. Using One-Time Initialization muestra cómo usarlos para asegurarse de que un evento se inicialice solo una vez.

+0

Este es definitivamente un buen enfoque; confiar en variables globales o singletons no funciona bien si se necesita usar la sección crítica antes de garantizar que todos los constructores de objetos globales sean llamados. – reuben

0

Puede inicializar una sección crítica global en DllMain para DLL_PROCESS_ATTACH (y limpiar para DLL_PROCESS_DETACH).

Cuestiones relacionadas