2009-04-07 3 views

Antwort

3

Ich würde vorschlagen, die CRITICAL_SECTION mit einer Klasse zu umhüllen, die die Initialisierung und Uninitialisierung des kritischen Abschnittsobjekts in seinem Konstruktor und Destruktor behandeln wird. Auf diese Weise werden Sie in den meisten Fällen threadsicher sein (Sie müssen sicherstellen, dass niemand auf das Objekt zugreift, bevor sein Konstruktor fertig ist, aber das ist relativ einfach).

Es gibt mehrere allgemeine Wrapper für CRITICAL_SECTION, die Sie verwenden können. MFC CCriticalSection ist die offensichtliche Wahl, aber Sie können auch Ihre eigenen erstellen.

1

Sicher gibt es viele viele Möglichkeiten.

  1. eine globale Variable
  2. Verwenden Sie ein Singleton-Instanz verwenden
  3. es in Haupt erstellen oder eine andere einzelne Instanz Funktion
  4. es als Mitglied var einiger einzelne Instanz Klasseninstanz erstellen

und so weiter. Dies unterscheidet sich nicht von anderen Fragen beim Versuch, eine einzelne Instanz von etwas in Ihrem Code zu erstellen.

0

Sie können auch eine Wrapper-Klasse verwenden und ein globales Objekt dieser Klasse deklarieren. Der Konstruktor des globalen Objekts wird beim Start nur einmal aufgerufen.

5

Unter Windows Vista können Sie die einmaligen Initialisierungsfunktionen verwenden. Using One-Time Initialization zeigt, wie sie verwendet werden, um sicherzustellen, dass ein Ereignis nur einmal initialisiert wird.

+0

Dies ist definitiv ein guter Ansatz; Sich auf globale Variablen oder Singletons zu verlassen, funktioniert nicht gut, wenn der kritische Abschnitt verwendet werden muss, bevor sichergestellt ist, dass alle globalen Objektkonstruktoren aufgerufen werden. – reuben

0

Sie können einen globalen kritischen Abschnitt in DllMain für DLL_PROCESS_ATTACH initialisieren (und aufzuräumen für DLL_PROCESS_DETACH).