J'utilise C++.Comment initialiser un membre statique en C++ à l'aide de la fonction
dans .h
:
static CRITICAL_SECTION g_CS;
dans .cpp
:
CRITICAL_SECTION CQCommon::g_CS;
mais je veux utiliser
QGUID temp;
EnterCriticalSection(&g_CS);
temp = g_GUID++;
LeaveCriticalSection(&g_CS);
return temp;
dans une fonction statique. Comment puis-je appeler InitializeCriticalSection(PCRITICAL_SECTION pcs);
?
Puis-je utiliser celui qui suit:
QGUID func(XXX)
{
static {
InitializeCriticalSection(&g_CS);
}
QGUID temp;
EnterCriticalSection(&g_CS);
temp = g_GUID++;
LeaveCriticalSection(&g_CS);
return temp;
}
Et comment puis-je invoquer DeleteCriticalSection(&g_CS)
après application quitter? En utilisant MFC, CCriticalSection semble être une solution.
Mettre la g_CS déclaration de variable dans le fichier d'en-tête défaites dans le but de le rendre statique (à moins qu'il est un membre de classe statique) –
Je suis désolé, je ne sais pas comprendre, pouvez-vous me donner un échantillon dans ma question? Je déclare toujours un membre statique de cette manière, cela semble fonctionner – user25749
Les variables méritent d'être déclarées comme statiques, lorsqu'elles sont supposées être accessibles à partir d'une seule unité de compilation; vous mettez une déclaration de variable dans un fichier d'en-tête pour la raison inverse: lorsque vous voulez l'utiliser dans plusieurs unités de compilation. De même, mettre une déclaration dans un fichier d'en-tête sans le spécificateur extern aboutirait à des définitions en double pendant la liaison dès que deux unités de compilation incluront cet en-tête. –