Toute question d'un PROFI à un SUPER PROFI - 1. - page 11

 
joo:

J'ai fait ça, toujours la même erreur :

Zhunko:

Le projet a-t-il été copié dans VC++ 6.0 avec ses propriétés ou a-t-il été configuré séparément ?

J'ai eu trois occasions d'utiliser des fonctions dans VS 2010 qui ne sont pas disponibles dans XP. Tout fonctionne sous Vista et 7, mais le terminal ne voit pas la bibliothèque sous XP.

Zhunko:

Je l'ai écrit au début du sujet. Cela se produit lorsque vous utilisez des fonctions WinAPI qui sont absentes dans XP. Une autre raison encore. Si la version minimale du système est limitée par une version supérieure.

Je vis la même chose maintenant. Je n'ai jamais eu l'occasion de rechercher cette fonction.

 

Zhunko:

joo:

J'ai fait ça, toujours la même erreur :

Zhunko:

Le projet a-t-il été copié dans VC++ 6.0 avec ses propriétés ou a-t-il été configuré séparément ?

J'ai eu trois occasions d'utiliser des fonctions dans VS 2010 qui ne sont pas disponibles dans XP. Tout fonctionne sous Vista et 7, mais le terminal ne voit pas la bibliothèque sous XP.

Zhunko:

Je l'ai écrit au début du sujet. Cela se produit lorsque vous utilisez des fonctions WinAPI qui sont absentes dans XP. Une autre raison encore. Si la version minimale du système est limitée par une version supérieure.

Je vis la même chose maintenant. Je n'ai jamais eu à chercher cette fonction.

J'ai trouvé la raison ! Mais je ne sais pas quoi en faire.

Le problème s'est avéré être dans cette construction d'une méthode de classe avec des méthodes statiques:

    static HWND HandleByProcessIdAndClass()
     {
      HWND   hwndLocal = NULL; // Дескриптор искомого окна.
      size_t i = 0;

      ::EnterCriticalSection(&GetInstance()->csOne);
      ::EnterCriticalSection(&GetInstance()->csMultiple);
     ................. Здесь защищаемый код ...................
      ::LeaveCriticalSection(&GetInstance()->csMultiple);
      ::LeaveCriticalSection(&GetInstance()->csOne);
      return(hwndLocal);
     }

Une fois que vous avez supprimé la synchronisation (surlignée en rouge), la bibliothèque devient visible pour XP. Sous Vista, cela fonctionne.

Peut-être la version d'une bibliothèque système est-elle insuffisante ?

=======

A propos de cette classe, je dois clarifier.

Toutes les méthodes de classe avec des méthodes statiques "Windows", et il y en a environ 80, ont une synchronisation similaire.

La méthode spécifiée est appelée en premier dans le constructeur d'une instance d'une autre classe "WindowsMT4".

Il semble que la classe "Windows" soit initialisée hors du temps.

 

J'ai trouvé la cause. Andrei a aidé. J'ai mal fait les singletons.

XP et Vista initialisent les classes différemment. Il faut les bons singletons.

 
Zhunko:

J'ai trouvé la cause. Andrei a aidé. J'ai mal fait les singletons.

XP et Vista initialisent les classes différemment. Il faut les bons singletons.


C'est vraiment dégoûtant. C'est juste horrible !
 
C-4:

C'est une vraie déception. C'est juste horrible !
Oh, allez... :-)) Je viens de convertir la classe avec des méthodes statiques en singleton. Tout fonctionne.
 
Zhunko:
Ouais, ok... :-)) Je viens de convertir une classe avec des méthodes statiques en singleton. Tout fonctionne.

Question pour que les superprofessionnels partagent leurs expériences :)) - comment supprimer un singleton ?

 
alsu:

Question pour que les superprofessionnels partagent leurs expériences :)) - comment supprimer un singleton ?

Vous voulez dire dégager les ressources ? Dans le destructeur, vous pouvez.
 
Zhunko:
Que voulez-vous dire par ressources claires ? Vous pouvez le faire dans le destructeur.

Non, dans le sens de retirer l'objet lui-même - quelle procédure décide du moment où il faut le retirer ?

Je n'ai pas d'objectif pratique pour le moment, je me suis juste souvenu qu'une fois j'ai fait un projet, qui utilisait plusieurs modèles de singleton - donc, il y avait toujours des problèmes au moment de la suppression du singleton - j'ai dû faire quelques problèmes avec le traçage de référence, l'enveloppement du destructeur dans des wrappers et ainsi de suite ... Et quand, par exemple, l'un des modules plantait à cause d'une exception, c'était la pagaille... En conséquence, c'est la dernière fois que j'ai eu recours aux singletons, car cela me semblait être bien plus un problème qu'un avantage)). Peut-être que je me trompe.

 
alsu:

Non, dans le sens de retirer l'objet lui-même - quelle procédure décide du moment où il faut le retirer ?

Je n'ai pas d'objectif pratique pour le moment, je me suis juste souvenu qu'une fois j'ai fait un projet, qui utilisait plusieurs modèles de singleton - donc, il y avait toujours des problèmes au moment de la suppression du singleton - j'ai dû faire quelques problèmes avec le traçage de référence, le wrapping du destructeur dans les wrappers et ainsi de suite... Et quand, par exemple, l'un des modules plantait à cause d'une exception, c'était la pagaille... En conséquence, c'est la dernière fois que j'ai eu recours aux singletons, car cela me semblait être bien plus un problème qu'un avantage)). Peut-être que je me trompe.

J'ai appris les singletons récemment. J'ai appris que je ne peux pas m'en passer. Je ne sais pas comment les supprimer. Je n'en ai pas eu besoin.
 

alsu:

En conséquence, c'était la dernière fois que je m'amusais avec des singletons, car cela me semblait être beaucoup plus de tracas que cela n'en valait la peine). Peut-être que je me trompe.

Si vous avez du mal à supprimer un singleton, il n'est probablement pas utilisé correctement. Bien que les singletons soient différents aussi, prenez le phoenix par exemple.